我试图使用 Enter 键终止整数数组输入。所以,我想使用 fgets 和 sscanf((,但每次我只得到第一个值时,我都尝试了几种方法。有人可以帮助我做错的地方吗?
#include<stdio.h>
int main(){
int inp[100]={0};
int c=0,n;
char str[100]={0};
char *data = str;
while ((NULL != fgets(str, sizeof str, stdin)) && (str[0] != 'n')) {
if (1 != sscanf(str,"%d",&inp[c])) {
puts("Input was not an integer, try again.n");
continue;
}
printf("ninp[%d] = %d",c,inp[c]);
c++;
if (c >= 100) break;
}
}
我添加了代码和输出的快照 - 法典 输出
>%n
是捕获已读取的字节数,因此您需要递增data
n
字节以指向下一个数字。
下面的程序读取所有整数,直到空的新行。
int main() {
int inp[100] = {0};
int c = 0, n = 0;
char str[100] = {0};
char *data = str;
while ((NULL != fgets(str, sizeof str, stdin)) && (str[0] != 'n')) {
data = str;
n = 0;
while (1 == sscanf(data, "%d%n", &inp[c], &n) && c < 100) {
printf("ninp[%d] = %dn", c, inp[c]);
data += n;
c++;
}
}