因此,我想构建一个简单的程序来使用结构输入数据。
我的原始程序如下所示:
#include <stdio.h>
#include <stdlib.h>
struct student {
int num;
char name[20];
};
int main()
{
int size, i;
scanf("%d", &size);
struct student s[size];
for(i=0; i < size; i++){
scanf("%d", &s[i].num);
scanf("%s", &s[i].name);
}
for(i=0; i < size; i++){
printf("no.:%d\n", s[i].num);
printf("name:%s\n", s[i].name);
}
return 0;
}
我的测试输入为:
2
1 Name1
2 Name2
它是有效的,但仅在正确输入数据时有效。
但是,当我尝试在结构中使用更多的字符串时,它开始变得混乱。例如,像这样的东西将不起作用:
#include <stdio.h>
#include <stdlib.h>
struct student {
int num;
char name[20];
char gender;
char address[20];
};
int main()
{
int size, i, j;
scanf("%d", &size);
struct student s[size];
for(i=0; i < size; i++){
scanf("%d", &s[i].num);
scanf("%s", s[i].name);
scanf("%s", s[i].gender);
scanf("%s", s[i].address);
}
for(i=0; i < size; i++){
printf("no.:%d\n", s[i].num);
printf("name:%s\n", s[i].name);
printf("gender:%s\n", s[i].gender);
printf("address:%s\n", s[i].address);
}
return 0;
}
我知道问题必须在于使用scanf进行字符串输入,因此我尝试使用getchar()。我认为这样的事情可能会起作用。
for(i=0; i < size; i++){
int j=0;
while(( s[i].name[j]=getchar()) != ' ');
j++;
s[i].name[j] = '\0';
}
虽然没有用。在这一点上,我感到困惑,我不确定什么地方做错了。我的意思是我想输入以下内容:
1001 Jeff M No.2_road_city
通过使用结构,但让我感到困惑的是应该如何精确地完成它。
最佳答案
放
fflush(stdin);
在使用scanf(“%s” ....
清除键盘缓冲区。两个连续的scanf语句而不刷新缓冲区导致第二个语句仅从第一个输入包含换行符/回车符
另一个问题:您将scanf("%s"
用于char变量(char性别)。更改为scanf("%c",&s[i].gender);
。
关于c - 结构数组;输入多个字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47616309/