如何跨多行,空格等读取用户输入?

时间:2018-05-09 11:44:07

标签: c arrays while-loop char scanf

我正在尝试扫描一些用户输入,但是当我运行程序时,我得到的是一堆3/4分数。

我需要能够扫描字符,空格和断行。如果用户输入如下内容:

Hello this
  is
     a test123 234     !!!

一旦完成他们想要输入的内容,他们将按CTRL + D,这就是我将停止阅读他们所说的内容的方式。

这是我的代码:

char user_input[1000];
int i = 0;
    while (scanf("%c", &user_input[i]) == 1) {
        i++;
}

2 个答案:

答案 0 :(得分:2)

您的代码没问题。以下程序:

#include <stdio.h>

int main()
{
    char user_input[1000];
    int i = 0;
    while (scanf("%c", &user_input[i]) == 1) {
        i++;
    }
    user_input[i] = '\0';
    printf("%d\n", i);
    printf("%s", user_input);
    return 0;
}

根据您的输入生成以下内容:

42
Hello this
  is
     a test123 234     !!!

scanf通常用于scan formatted输入。我建议您使用getchar()fgets()

一次阅读一个字符
int main(void) {
   char user_input[1000];
   int i = 0;
   int temp;
   while ((temp = getchar()) != EOF) {
        user_input[++i] = temp;
   }
   user_input[i] = '\0';
}

答案 1 :(得分:0)

为了更好地控制用户输入,您可以使用getchar()逐个字符地读取用户输入,当用户输入CTRL-D时,它通常会返回EOF。之后,可以解析字符串以提取输入的分数等。

如果您仍然喜欢使用scanf()之类的东西,可以考虑用fgets()调用替换它,以防止缓冲区溢出。 Or use scanf() with an appropriate formatting string指定的最大字符数)。

    /* gcc -o test_getchar test_getchar.c  && ./test_getchar */

    #include <stdio.h>

    int main()
    {
        char user_input[1000] = {0};
        int i = 0;
        char c;
        while ((c = getchar()) != EOF) {
            /* do something with c here... */
            user_input[i] = c;
            ++i;
            if (i >= sizeof(user_input)-1)
                break;
        }
        user_input[i] = 0;
        printf("user input: %s\r\n", user_input);
        return 0;
    }