因此,我想构建一个简单的程序来使用结构输入数据。

我的原始程序如下所示:

#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/

10-17 01:41