3


我提示用户输入数组的长度,用这个输入初始化一个 char[] 数组,然后提示用户输入一条消息以输入 char[] 数组。

我正在阅读用户消息的第一个字符getchar()

但是,在读取任何用户输入之前读取getchar()换行符。'\n'似乎是'\n'从前面printf提示用户的语句中得到的……


下面是相关代码:

#include <stdio.h>

int main(void) {

    int len = 0,
        originalLen = 0;

    printf("\n\nWhat is the length of the array? ");
    scanf("%d", &originalLen);
    char str[originalLen]; // intitializing the array

    printf("Enter a message to enter into the array: ");
    char target = getchar();
    str[len] = target;

    // why is getchar() reading '\n'?
    if (target == '\n') {
        printf("\n...what happened?\n");
    }
    return 0;
} // end of main


4

3 回答 3

4

是因为前一个scanf不读取数字后的换行符。

这可以通过两种方式解决:

  1. 使用例如getchar阅读它
  2. scanf在格式后添加一个空格(例如scanf("%d ", ...)
于 2013-02-08T03:31:08.380 回答
3

您可以getchar在循环中使用以在读取下一个字符之前清除标准输入。

while((target = getchar()) != '\n' && target != EOF)
于 2013-02-08T03:33:48.557 回答
2

当您输入数字并按 ENTER 键时,一个数字和一个字符被放置在输入缓冲区中,它们分别是:

  • 输入的号码和
  • 换行符 ( \n)。

该数字被 消耗,scanf但换行符保留在输入缓冲区中,由 读取getchar()

您需要\n在调用之前getchar()使用:

scanf("%d ", &originalLen);
         ^^^

这告诉scanf读取数字和一个附加字符,即\n.

于 2013-02-08T03:32:05.627 回答