操作方法
这是中国海洋大学学生成绩信息管理系统大作业。 先设置一个结构体。 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给了一个黄色的小三角形和一段看不懂的英文
在VB中运行的效果如图:
有些同学认为在%d%s%f%f%f之间加逗号就可以解决。实际上还是无法解决,虽然在%s和%f之间加了一个逗号。后面的数据都被%s吃掉了。
解决方案如下: 如果需求必须是先输入字符串后输入数字,那么必须人工进行判断。 思路为用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; }
结论: 在C程中,连续输入和输出字符串和数字时,慎之又慎。一定要看输出时候,字符串会不会把后面的数字“吃”掉。 解决方法有三种: 一、逐个输入字符; 二、把字符和数字分开输入; 三、把字符放在数字的最后面输入。