c-为什么getchar()正在读取'n'在printf语句之后




我提示用户输入数组的长度,使用此输入初始化char[]数组,然后提示用户键入一条消息以输入到char[]数组中。

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

然而,getchar()在读取任何用户输入之前正在读取新行转义'n'。它似乎是从上一个提示用户的printf语句中获得'n'。。。


以下是相关代码:

#include <stdio.h>
int main(void) {
    int len = 0,
        originalLen = 0;
    printf("nnWhat 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


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

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

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

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

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

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

  • 输入的数字和
  • 换行符(n

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

在使用调用getchar()之前,您需要消耗n

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

此命令告诉scanf读取数字和一个附加字符,即n

相关内容

  • 没有找到相关文章

最新更新