所以我想构建一个使用结构输入数据的简单程序。
我原来的程序看起来像这样:
#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
通过使用结构,但我很困惑应该如何完成它。
答案 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"
。