如何在输入“仅”换行符或空格之前进行输入?基本上如何运行循环,直到您不输入任何内容?

时间:2019-02-25 11:15:23

标签: c loops input io

我正在尝试创建一个循环,一直循环直到输入“仅”换行符,或者只是一个空格(直到输入行未输入任何内容)为止。

 #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
        int num;
        while(1)
        {
            scanf("%d",&num);
            if(num==NULL)
                break;
        printf("%d",num);
        }
        return 0;
    }

2 个答案:

答案 0 :(得分:0)

使用scanf不能做到这一点(至少不容易做到)。如果要处理用户输入,scanf是一个错误的选择(事实上,在我用C语言开发的所有岁月中,我从未使用过scanf;建议您完全避免使用它。)< / p>

num==NULL毫无意义:num是一个数字,但是NULL是一个指针值。如果要检查scanf是否成功,则需要检查其返回值。

我会做类似的事情:

char line[100];
while (fgets(line, sizeof line, stdin)) {  // read input line by line
    int num;
    if (sscanf(line, "%d", &num) != 1) {  // the line didn't start with a valid integer
        break;
    }
    printf("%d\n", num);
}

如果您要专门检查一个空字符串,而不仅仅是一个看起来不像数字的字符串,则可以使用strspn

if (line[strspn(line, " \t\n")] == '\0') {
    // line contains spaces / tabs / newlines only

答案 1 :(得分:0)

除了整数以外,还有其他可能在一行上的东西。您的代码表示预期的整数,但您的文本仅表示该行为空白或仅包含空格。

给出问题中的文字:

#include <stdio.h>
#include <string.h>

int main( void )
{
    char line[1024];

    while( fgets( line, sizeof( line ), stdin ) )
    {
        if(   (strlen( line ) == 1 ) 
          ||  (strlen( line ) == 2  && line[0] == ' '))
        {
            // all done
            break;
        }
        else
        {
            // process line
        }
    } // end while
}