C 如何跨多行、多个空格等读取用户输入?

C 如何跨多行、多个空格等读取用户输入?,c,arrays,while-loop,char,scanf,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) {

我试图扫描一些用户输入,但当我运行程序时,我得到的只是一堆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++;
}

你的代码没问题。以下节目:

#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;
}
但是,
scanf
通常用于
扫描格式化的
输入。我建议使用
getchar()
fgets()


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

如果您仍然想使用SCANF()之类的东西,您可以考虑用调用来替换它,以防止缓冲区溢出。(具有指定的最大字符数)

/*gcc-o test\u getchar test\u getchar.c&./test\u getchar*/
#包括
int main()
{
字符用户_输入[1000]={0};
int i=0;
字符c;
而((c=getchar())!=EOF){
/*在这里用c做点什么*/
用户输入[i]=c;
++一,;
如果(i>=sizeof(用户输入)-1)
打破
}
用户输入[i]=0;
printf(“用户输入:%s\r\n”,用户输入);
返回0;
}

@IanAbbott是的,这似乎解决了问题。感谢根据您在程序的其余部分中如何使用
user\u input
,当循环终止时,您可能需要向其添加空终止符。
42
Hello this
  is
     a test123 234     !!!
int main(void) {
   char user_input[1000];
   int i = 0;
   int temp;
   while ((temp = getchar()) != EOF) {
        user_input[++i] = temp;
   }
   user_input[i] = '\0';
}
    /* 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;
    }