【问题标题】:How to prompt the user to enter an integer and a character from the keyboard in C [duplicate]如何在C中提示用户从键盘输入整数和字符[重复]
【发布时间】:2018-08-31 05:06:32
【问题描述】:

我正在尝试找出从用户那里获取整数和字符的最佳方法

这是我目前所拥有的:

#include <stdio.h>
int main()
{
    int a;
    char b;
    printf("enter the first number: \n");
    scanf("%d", &a);
    printf("enter the second char: \n");
    scanf("%c", &b);

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

输出显示不正确。这有什么问题吗?

【问题讨论】:

  • 换行符(回车键)是隐藏的幽灵:)

标签: c


【解决方案1】:

您的输入和输出语句都很好。只需将 printf("Number %d",a); 替换为 printf("Number %d\n",a); 即可更好地格式化输出。此外,您应该将第二个 scanf 语句更改为 scanf(" %c", &amp;b);。这将处理输入数字后输入的换行符。

【讨论】:

    【解决方案2】:

    输入数字后,按Enter 键。由于scanf 函数作用于输入stream,当您在读取数字后尝试处理下一个char 时,您读取的不是您键入的字符,而是前面的'\n' 字符那。 (即,因为在您输入 char 之前,您按下的 Enter 键在您的输入流中添加了一个 '\n' 字符)

    您应该将第二次呼叫更改为 scanf,如下所示。

    scanf(" %c", &b);
    

    注意格式化字符串中添加的空格字符。格式化字符串中的初始空格有助于跳过其间的任何空格。

    此外,您可能希望在您进行的两个printf 调用的格式字符串末尾添加\n,以获得更好的输出格式。

    【讨论】:

      【解决方案3】:

      这里你需要处理隐藏字符 '\n' ,通过在 scanf() 函数中提供 %c 之前的空格,所以“STDIN”缓冲区将被清除,scanf 将等待“STDIN”中的新字符" 缓冲区。

      在你的程序中修改这条语句:scanf("%c",&b);到scanf("%c",&b);

      【讨论】:

        猜你喜欢
        • 2019-06-11
        • 2020-06-22
        • 1970-01-01
        • 1970-01-01
        • 2018-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多