如何在一个接一个地存储数组中的字符,直到用户输入字符以外的输入,然后在屏幕上重现它?

时间:2015-03-07 15:21:03

标签: c arrays char

以下是我用来存储用户的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。我也一个接一个地输入输入。

1 个答案:

答案 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]将被取消初始化。