为什么getchar()在printf语句后读取'\ n'?

时间:2013-02-08 03:29:35

标签: c newline printf getchar


我提示用户输入数组的长度,使用此输入初始化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


3 个答案:

答案 0 :(得分:4)

这是因为之前的scanf 在数字后读取换行符。

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

  1. 使用例如getchar阅读
  2. scanf格式(例如scanf("%d ", ...)
  3. 添加空格

答案 1 :(得分:3)

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

while((target = getchar()) != '\n' && target != EOF)

答案 2 :(得分:2)

输入数字并按ENTER键时,数字和字符放在输入缓冲区中,即:

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

scanf消耗了这个数字,但换行符仍在输入缓冲区中,由getchar()读取。

在使用以下方法调用\n之前,您需要使用getchar()

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

这告诉scanf读取数字和另一个字符\n