我需要阅读一行,其中包含用空格分隔的整数数字
输入:1 41 2 15 6 7 87 4 2 1 9 0
我的代码可以使用
读取每个数字int number;
while(scanf("%d", &number) == 1) {
printf("%d", number);
}
当我发送一些字符时,while循环结束,当用户按回车键时,我怎么能做到while循环结束?
我的课程是做什么的
输入第1行: 1 2 3 4 5 6 - 这里我按下
输入第2行: b - 发送一些奇怪的角色来完成
我想要什么
输入第1行: 1 2 3 4 5 6 - 在这里按Enter键完成
答案 0 :(得分:4)
您的整数通常由空格分隔,除非您阅读最后一个。在这种情况下,后面跟一个换行符:
char next_char;
int number;
while (scanf("%d%c", &number, &next_char) == 2) {
/* some stuff */
if (next_char == '\n') break;
}
答案 1 :(得分:2)
如果有足够的缓冲区,fgets
会读取并包含换行符
可以使用sscanf
解析值。对于未知数量的值,请使用%n
说明符迭代输入。 %n
记录扫描处理的字符数。在这里,每次扫描中使用的字符都会累积在offset
。
#include <stdio.h>
#define SIZE 200
int main( void)
{
char input[SIZE] = { '\0'};
int used = 0;
int offset = 0;
int number = 0;
if ( ( fgets ( input, SIZE, stdin))) {
while ( ( sscanf ( &input[offset], "%d%n", &number, &used)) == 1) {
offset += used;
printf ( "%d\n", number);
}
}
else {
fprintf ( stderr, "problem getting input\n");
}
return 0;
}