如何知道scanf()

时间:2016-09-03 19:50:07

标签: c

我需要阅读一行,其中包含用空格分隔的整数数字

输入: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键完成

2 个答案:

答案 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;
}