以下是我用来存储用户的a-z字母然后在屏幕上重现的字母的程序。
#include <stdio.h>
#include <string.h>
int main()
{
int const size = 26;
int index;
char arr[size]; // = "abcdefghijklmnopqrstuvwxyz";
printf("\nEnter the lowercase letters\n");
for (index = 0; index < size; index++){
scanf_s("%c", &arr[index]);
}
for (index = 0; index < size; index++){
printf("\n%c\n", arr[index]);
}
return 0;
}
尽管如此,我更容易直接存储然后重现它,但每当我开始运行程序时。它接受字母'm'然后退出。我一直想弄清楚,但找不到错误。我也使用Visual Studio 2013 Ultimate。我也一个接一个地输入输入。
答案 0 :(得分:1)
由于"%c"
说明符正在捕获上一次调用留下的'\n'
字符。
您可以通过使格式字符串忽略该字符来解决此问题。这是通过在%c
之前添加explcit空格来完成的
scanf(" %c", &arr[index]);
但是在这种情况下,如果您简单地使用getchar()
或fgetc()
,那么它会更好用,就像这样
size_t size = 26;
int chr;
size_t index;
char arr[size] = {0};
chr = getchar();
for (index = 0 ; ((index < size) && (chr != EOF)) ; ++index)
{
arr[index] = chr;
chr = getchar();
}
for (index = 0 ; index < size ; ++index)
printf("%c\n", arr[index]);
另外,显然所有其他人都以错误的方式使用scanf()
,即使在这种情况下,出现问题的可能性也很小,您也不会检查返回价值scanf()
以及潜在问题,因为如果 Ctrl + D 或&#34; Ctrl + Z (Windows操作系统)&#34 ;,输入然后arr[index]
将被取消初始化。