【发布时间】:2015-12-11 02:06:06
【问题描述】:
我正在尝试让用户输入一串字符。我希望我的程序一次一个地继续扫描字符,直到它看到 \n 字符(即,当用户按下 ENTER 键时)。
看来我编写的代码由于某种原因没有将字符存储到数组中。我知道这一点是因为包含printf() 语句的for 循环不会重现输入终端的字符。我最后的努力是打印出a[0],以防我的循环出现问题,但它仍然表明我的字符数组中没有存储任何内容。
有什么解释吗? (请不要建议我使用 string.h 库——我不想将它用于我的目的。)
#include <stdio.h>
int main(void)
{
char a[21];
int i;
printf("enter a bunch of characters: ");
for (i = 0; ; i++)
{
scanf("%c", &a[i]);
if (a[i] = '\n')
{
break;
}
}
printf("the size of char array is %d\n", sizeof(a)/sizeof(a[0]));
for (i = 0; a[i] != '\0'; i++)
{
printf("%c", a[i]);
}
printf("%c", a[0]);
return 0;
}
【问题讨论】:
-
第二个
for循环查找a[i] != '\0',但您从未将空字节放入数组中。 -
typo:
if (a[i] = '\n')将'\n'分配给a[i],并评估为“真”。然后我们立即退出循环。你的意思是说if (a[i] == '\n') -
啊哈!感谢您指出@PaulRoub。对我来说这是一个菜鸟的错误。还有@Barmar,我没有意识到我必须自己这样做。我以为
\0在声明时会自动转到该区域的最后一个元素? -
自动变量未使用任何特定值进行初始化。全局变量和静态变量自动初始化为全0。
-
for循环应该限制字符数,即for (i=0; i<20; i++),这样用户就不会超出缓冲区。此外,您的编译器应该已发出有关拼写错误的警告。如果没有,您需要使用更高的警告级别。