大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在scanf中不要用\n.
十载的北海街道网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整北海街道建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“北海街道网站设计”,“北海街道网站推广”以来,每个客户项目都认真落实执行。
如果要忽略一个字符.
可以
getchar();
scanf("%c", C);另外
要传给主函数,
需要指针,
或者用
返回值
.
即
void info (char *C)
{
getchar();
scanf("%c", C);
}调用的时候
info (A);
info (B);
1、char类型,也就是常说字符类型。char类型和其它类型一样在定义和初始化上可以先声明(定义),再赋值(初始化)。使用char来定义一个字符,通过单引号括起来的单个字符赋值给它。
2、当然你也可以在定义变量的时候就初始化(也就是在声明的时候赋值)。
3、注意字符并不意味着字母,单引号括起来的单个字符。所谓单个字符可以是数字、中文之类的。
4、字符类型可以自动转化为存储空间比它大的int类型。例如下面的例子,c是字符,把它赋值int类型的i1时,却不报错就是因为自动转化。
5、int转化为字类型时(这种是属于存储空间由大向小的转化),则需要强转。
6、加了强制转换这后,它就不报错了。
指针就是指向内存的某个地址的一个变量。
结构体指针就是这个指针变量的值必须指向存放该结构体的内存位置。
当这个指针没有任何指向时,可以赋值为null值,但是改指针不可使用,程序中应该做判断。下面是一些赋值演示。
struct student{
int id;
int score;
} aaa;
struct student *p = null;//结构体指针p初始化赋值为null
struct student *p2=aaa;//p2指向aaa
struct student *p3=(struct student *)malloc(sizeof(struct student));//内存中申请一个结构体空间,并将地址强制转换为结构体指针变量赋值给p3
n = scanf("%d",n);
这一句有问题
1. scanf 函数是有返回值的,它的返回值可以分成三种情况
1) 正整数,表示正确输入参数的个数。
例如执行 scanf(“%d %d”, a, b);
如果用户输入”3 4”,可以正确输入,返回2(正确输入了两个变量);
如果用户输入”3,4”,可以正确输入a,无法输入b,返回1(正确输入了一个变量)。
2) 0,表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果输入”,3 4”,返回0。
3) EOF,这是在 stdio.h 里面定义的常量(通常值为-1),表示输入流已经结束。在Windows下,用户按下CTRL+Z(会看到一个^Z字符)再按下回车(可能需要重复2次),就表示输入结束;Linux/Unix下使用CTRL+D表示输入结束。
你这个输入一个返回值就是1,因此n也会一直等于一
#includestdio.h
#includestdlib.h
int assignment(int *,int);
void print(int *,int);
void main()
{
int sz,rt;
int *p; //定义一个指针,在子函数里再动态分配内存
printf("输入data的数据元素个数:");
scanf("%d",sz);
rt=assignment(p,sz); //调用赋值函数
printf("数组最后元素为:%d\n",rt);
}
int assignment(int data[],int size) //按 Fibonacci 数列对数组元素依次赋值
{
int res;
data=(int *)malloc(size*sizeof(int));
if(size==1)
data[0]=1;
else if(size==2)
{
data[0]=1;
data[1]=1;
}
else
{
data[0]=1;
data[1]=1;
for(int i=2;isize;i++)
data[i]=data[i-1]+data[i-2];
}
print(data,size); //调用打印函数
res=data[size-1]; //最后一个元素是data[size-1]
free(data); //释放内存
return res;
}
void print(int data[],int size) //打印数组
{
for(int i=0;isize;i++)
printf("%d ",data[i]);
}
有注释的,不明白的再讨论
结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存。
举例:编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数
#include stdio.h
#include stdlib.h
struct student //建立结构体,学号,姓名,3门课的分数
{
int num;
char name[10];
int score[3];
}Stu[5]; //初始化,一共5个学生的数据
void getScore(struct student * p) //函数:向结构体读取分数,一共三门课
{
int i, j;
for (i = 0; i 5; i++)
for (j = 0; j 3; j++)
scanf_s("%d", ((p+i)-score[j]));
}
void getNum(struct student * p) //函数:向结构体读取学号
{
int i;
for (i = 0; i 5;i++)
scanf_s("%d", (p + i)-num);
}
void getName(struct student * p) //函数:向结构体读取姓名
{
int i;
for (i = 0; i 5; i++)
scanf("%s", (p + i)-name);
}
int main()
{
int i, j, average[3] = { 0 }; //average数组储存每门课的平均分
getNum(Stu); //函数调用
getName(Stu);
getScore(Stu);
for (j = 0; j 3; j++)
{
for (i = 0; i 5; i++)
average[j] += Stu[i].score[j];
}
for (i = 0; i 5; i++)
{
printf("num = %d name = %s Score:", Stu[i].num, Stu[i].name); //依次打印学号 姓名
//printf("%d %d %d", Stu[0].score[0],Stu[0].score[1],Stu[0].score[2]);
for (j = 0; j 3; j++) //打印三门课的分数
printf(" %d", Stu[i].score[j]);
printf("\n");
}
printf("average:");
for (i = 0; i 3; i++)
printf("%f ", (float)average[i]/5); //打印三门课平均分
printf("\n");
system("pause");
return 0;
}
如:
scanf("%c%c%c",a,b,c);
输入为:
d e f
则把'd'赋予a, ' '(空格)赋予b,'e'赋予c。因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把' '作为下一个字符送给b。
只有当输入为:def(字符间无空格) 时,才能把'd'赋于a,'e'赋予b,'f'赋予c。
扩展资料:
1、函数原型
int scanf(const char * restrict format,...);
函数 scanf() 是从标准输入流stdin [1] (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
2、返回值
scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。如:
scanf("%d %d",a,b);函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;
如果只有a被成功读入,返回值为1;如果a和b都未被成功读入,返回值为0;如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。
例:使用scanf函数输入数据。
#include stdio.h
int main(void)
{
int a,b,c;
printf("Give me the value of a,b,c seperated with whitespaces:\n");
scanf("%d%d%d",a,b,c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
return 0;
}
注意:a,b,c中的是寻址操作符,a表示对象a在内存中的地址,是一个右值。变量a,b,c的地址是在编译阶段分配的(存储顺序由编译器决定)。
如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以用逗号分隔,只能用空白字符(空格或tab键或者回车键)分隔——“2 (空格)3(tab) 4” 或 “2(tab)3(回车)4”等。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”。
参考资料:
百度百科——scanf(计算机语言函数)