C语言中正确使用Printf和Scanf函数
1、这是中国海洋大学学生成绩信息管理系统大作业。
先设置一个结构体。
struct Student //结构体类型格式
{
int number;
char name[10];
float chinese;
float maths;
float english;
};
在写录入信息函数的时候写了一段程序:
scanf("%d%s%f%f%f",&stu[0].number,stu[0].name,stu[0].chinese,stu[0].maths,stu[0].english);
然而XCode给了一个黄色的小三角形和一段看不懂的英文

2、在VB中运行的效果如图:

3、有些同学认为在%d%s%f%f%f之间加逗号就可以解决。实际上还是无法解决,虽然在%s和%f之间加了一斤吩个逗号。后面的数据都被%s吃掉了。


4、解决方案如下:
如果需求必须是先输入字符串后输入数字,那么必须人工进行判断。
思路为用getchar逐个读入字符,并赋值到字符串对应位置,当出现逗号时结束。然后再用scanf读入数字。
代码如下:
#include <stdio.h>
int main()
{
char s[100];
int v;
int i = 0;
while(1)
{
s[i] = getchar();//逐个输入字符并赋值到字符串中。
if(s[i] == ’,’)//输入结束。
{
s[i] = ’\0’;//赋值结束符。
break;//退出循环。
}
i ++;
}
scanf("%d",&v);//继续输入数字。
printf("%s\n%d\n", s, v);//输出得到的变往闲毙量,每行一个值。
return 0;
}
5、结论:
在C程中,连续输入和输出字符串和数字时,慎之又慎。一定要看输出时候,字符串会不会把后面的数字“吃”掉。
解决方法有匠包三种:
一、逐个输入字符;
二、把字符和数字分开输入;
三、把字符放在数字的最后面输入。