我想读未知数量的使用输入scanf
函数。
int a[100];
int i = 0;
while((scanf("%d", &a[i])) != '\n')
i++;
// Next part of the code
但是,这个功能是不会代码的下一部分,好像有while循环无限。
我该如何解决这个逻辑上的错误? 是否有任何其他的替代scanf
喜欢sscanf
读整数到一个数组?
我想读未知数量的使用输入scanf
函数。
int a[100];
int i = 0;
while((scanf("%d", &a[i])) != '\n')
i++;
// Next part of the code
但是,这个功能是不会代码的下一部分,好像有while循环无限。
我该如何解决这个逻辑上的错误? 是否有任何其他的替代scanf
喜欢sscanf
读整数到一个数组?
scanf
返回已成功匹配和分配的输入项目的数量,因此是合理的事:
while(scanf(...) == 1)
现在,你希望能够读取多个号码,在每一个新行定义。 然后,你可以简单地这样做:
int array[100];
int i = 0;
while(i < 100 && scanf("%d\n", &array[i]) == 1)
i++;
注意,如果输入无效的输入这种阅读才停止(例如字母q
),或者当你输入端的输入控制代码,这是Ctrl + Z(在Windows上)或Ctrl + d(在Mac,Linux的, Unix的)。
scanf函数的返回值是成功匹配和分配的输入项目的数量 ,所以试试这个结束时遇到非数字输入时:
while (i < 100 && (scanf("%d", &a[i])) == 1) { i++; }
首先替换"%d"
的" %d"
,这将避免新的生产线的问题
第二,如果你的输入包含非数字输入,则while循环将在无限循环进入。 所以你必须检查你的输入,如果它是一个数字输入
scanf的的返回值是每个呼叫的扫描输入个数。 你可以把它比作整数10(或“\ n”),这将停止循环,当scanf函数实际读取的10个项目。 (要做到这一点,就必须有在格式字符串10个符。
你可以试试
while((i<10) && (scanf("%d",a+i)==1)) i++;
接受任何数量的参数必须被编程如。 如
while (fgets(mybuf, ALLOCATED_LENGTH-1, stdin)) {
char *p = mybuf;
if (*p=='\n') break; // or a better function to test for empty line
while (custom_scan_next_integer(&p)) i++;
}
其中custom_scan_next_integer
修改指针p转发字符适量。
你想干什么
char discard;
while(i < 100 && (scanf("%d%1[^\n]s", &arr[i], &discard)) == 2)
i++;
继续得到输入直到一个新行。
scanf()函数不用于阅读整线的最佳工具。 你应该用fgets()读取行,然后使用的sscanf()或其它功能解析它。