【问题标题】:Problem with scanf [duplicate]scanf的问题[重复]
【发布时间】:2011-05-20 23:15:39
【问题描述】:

可能重复:
Simple C scanf does not work?

为什么scanf("%c", &letter); 不起作用。其余的都在工作

#include <stdio.h>

main(){
    int number;
    float number1;
    char letter;
    char letter2 [5];

    printf("Enter an int: ");
    scanf("%d", &number);
    printf("Enter a float: ");
    scanf("%f", &number1);
    printf("Enter a letter: ");
    scanf("%c", &letter);
    printf("Enter a string: ");
    scanf("%s", letter2);

    printf("INT = %d\n", number);
    printf("FLOAT = %f\n", number1);
    printf("LETTER = %c\n", letter);
    printf("LETTER2= %s\n", letter2);

    getch();
}

【问题讨论】:

  • 似乎是正确的。你有什么结果?
  • scanf("%c", &letter) 不工作
  • 我认为scanf\n 留在缓冲区中,letter 变为\n。不过不确定。
  • 从样本中可以看出,Khachik 在这里很赚钱。 TBH 在十多年的 C 编程生涯中,我从未使用过 scanf()。在这种情况下,在标准输入上执行 fgets() 并使用 atoi 或一些类似的函数可能会更整洁。一个优点是您可以对输入进行检查,以确保它是正确的/符合您的预期。
  • Simple C scanf does not work? 的可能重复项(以及其他几个 - 尝试 SO 搜索 scanf)

标签: c


【解决方案1】:

这是因为喂完float后的换行符(回车键)算作一个字符。

这不是一个错误,而是因为“\n”被认为是 C 中的一个字符,如果您必须忽略它,您需要手动执行此操作。

对于您的情况,最简单的解决方案是按如下方式吃掉换行符:

scanf("%f", &number1);
getchar();

这个Link 会有所帮助。

【讨论】:

  • @sample: 不,请查看 Paul 在评论中提供的链接,您的问题与另一个问题重复。
  • @sample c 是最强大的语言,这就是它用于设备驱动程序的原因。你怎么能说 c 有问题。
【解决方案2】:

scanf 从上一行读取缓冲区中剩余的空白。要跳过空格,请在 scanf 中添加一个空格:

scanf(" %c", &letter);

空格表示“跳过空格”,%c 表示“读取以下字符。

【讨论】:

  • 这是 c 中的错误吗?还是有其他用途?
  • @sample: c 不能有错误,它不是程序,它是一种语言。不是,它应该是那样的。
  • @sample no
猜你喜欢
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 2019-03-11
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多