一系列结构;输入多个字符串

时间:2017-12-03 07:37:01

标签: c arrays string structure scanf

所以我想构建一个使用结构输入数据的简单程序。

我原来的程序看起来像这样:

#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

通过使用结构,但我很困惑应该如何完成它。

1 个答案:

答案 0 :(得分:-1)

放     from operator import iadd, isub, imul, itruediv from itertools import product operators = (iadd, isub, imul, itruediv) def is_hundred(values): n_operators = len(values) - 1 for ops in product(operators, repeat=n_operators): value = values[0] for op, v in zip(ops, values[1:]): value = op(value, v) if value == 100: print(list(ops)) return True else: return False print(is_hundred([99,1,1,1,1,1])) print(is_hundred([1,1,1,1])) 在使用scanf之前(&#34;%s&#34; .... 它清除键盘缓冲区。两个连续的scanf语句没有刷新缓冲区导致第二个只包含第一个输入的换行/回车

另一个问题:您使用fflush(stdin);作为char变量(char gender)。更改为scanf("%s"