初学者到C:对一个简单的程序感到沮丧

时间:2012-01-27 20:03:49

标签: c

#include<stdio.h>

int main()
{
    char a, b;
    scanf("%c", &a);
    scanf("%c", &b);

    printf("%c %c",a,b);
    return 0;
}

当我运行这个程序时,我只得到输出作为&amp;我没有得到输入第二个字符的提示。为什么呢?

3 个答案:

答案 0 :(得分:11)

在这一行中,

scanf("%c", &a);

你实际上从stdin(标准输入)获取%d但是当你从stdin输入一个字符时,你也从键盘输入了ENTER,这意味着你现在在stdin中有两个字符;角色本身&amp; \ n。因此,该程序将第一个字符设为the one you entered&amp;第二个字符为\n

您需要使用

scanf("%c\n", &a);

以便scanf 换行符(也可以按ENTER键)。

rodrigo所述,您也可以使用这些。

scanf(" %c", &a); or scanf("%c ", &a);

您认为打印第二个字符的方式是错误的。它实际上正在打印,但它是\ n所以你的提示可能会进入下一行。

如果您在不使用ENTER的情况下输入两个字符,您的代码将会起作用。

shadyabhi@archlinux /tmp $ ./a.out 
qw
q wshadyabhi@archlinux /tmp $

注意,当你使用它时,STDIN中唯一的东西就是q&amp; W上。所以,第一次扫描q&amp;第二个w

答案 1 :(得分:2)

因为当您按下enter键时,生成的换行符将作为单独的字符读入b。试试这个:

#include<stdio.h>

int main()
{
    char a, b;
    scanf("%c %c", &a, &b);

    printf("%c %c",a,b);
    return 0;
}

答案 2 :(得分:0)

%c是一个格式字符串,只接受一个字符。我想你按下字母键后按Enter键。 Enter键也被识别为字符。所以下一个变量是输入值,其值为“\ 0” 计算机仍在从第二个变量打印字符,但由于没有打印任何内容,因此它不可见。如果你敏锐地观察,会有一个新的线 一个接一个地输入两个字符,您将获得正确的输出。