以下c程序的意外输出

时间:2016-01-29 16:38:19

标签: c

预期的以下代码应该接受来自用户的两个char值。但它只接受ch1的一个值,然后打印“hello”。

#include<stdio.h>

int main()
{
    char ch1, ch2;

    printf("Enter a char: ");
    scanf("%c",&ch1);

    printf("Enter second char: ");
    scanf("%c",&ch2);



    printf("Hello");
    return 0;
}

它不接受ch2的第二个值。可能的原因是什么? 据我所知,它应该接受2个字符。

1 个答案:

答案 0 :(得分:1)

它只接受一个char,因为第一次调用scanf()会在输入流中留下换行符。

您可以通过以下方式忽略它:

scanf(" %c",&ch2); // note the leading space.

这将确保忽略先前输入的换行符。格式字符串中的空白区域告诉scanf()忽略任何数量的空白字符。您可能还想检查scanf()次呼叫的返回值,以防它失败。

来自scanf()

    .     A sequence of white-space characters (space, tab, newline,
          etc.; see isspace(3)).  This directive matches any amount of
          white space, including none, in the input.