C - fgets() 和 sscanf() 只将第一个整数存储在数组中



我试图使用 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是捕获已读取的字节数,因此您需要递增datan字节以指向下一个数字。

下面的程序读取所有整数,直到空的新行。

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++;
}
}

最新更新