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