【问题标题】:Why is scanf always giving me zero for my first input? [closed]为什么我的第一个输入 scanf 总是给我零? [关闭]
【发布时间】:2018-09-07 03:51:10
【问题描述】:

我是一名 Java 程序员,试图为一个班级学习 C 语言,但我无法理解这一点。没有理由为什么这不应该工作,但事实并非如此。我正在尝试编写一个简单的计算器应用程序,无论我如何编写它,我输入的第一个数字(变量 a)最终都是 0,但第二个很好。以 5 + 6 作为输入,输出为 6。我错过了什么?

#include <stdio.h>

int main()
{
    long int a, b, c;

    char op;

    c = 0;

    printf("Enter the expression: ");
    scanf("%ld %s %ld", &a, &op, &b);

    switch(op){
        case('+'): c = a+b; break;
        case('-'): c = a-b; break;
        case('*'): c = a*b; break;
        case('/'): c = a/b; break;

        default: break;
    }

    printf("\n%ld", c);

    return 0;

}

【问题讨论】:

  • %c 是一个字符,而不是 %sscanf 也有一个返回值,您应该检查它以确保它读取您期望的项目数。
  • 您应该使用%c 作为运算符,而不是%s
  • 谢谢。修复了它,但我仍然得到相同的输出。我在网上查找的每个 scanf 教程都告诉我这是设置它的正确方法
  • 刚刚开始工作。出于某种原因,当我删除 %ld %c 和 %ld 之间的空格并相应地调整我的输入 (5+6) 时,它可以工作。
  • 请提供 *input*/a 会话的示例,作为从您输入输入并显示相应输出的控制台复制粘贴

标签: c scanf


【解决方案1】:

scanf函数在输入失败时返回宏EOF的值 在第一次转换(如果有)完成之前。否则,函数返回 分配的输入项目的数量,可以少于提供的数量,甚至为零,在 早期匹配失败的事件。

所以要经常检查scanf是否成功,以及是否正确分配了项目数。

最好了解转换说明符(% 字符之后的内容)和长度修饰符及其在 C 中的含义。

查看 C 委员会草案 (N1570) 部分 7.21.6.2 The fscanf function7.21.6.4 The scanf function,您将了解如何使用 scanf

【讨论】:

    【解决方案2】:

    我不确定您是否将5&lt;space&gt;+&lt;space&gt;65+6(不带空格)作为输入。如果您正在执行第一个,请尝试执行第二个,即number1+number2,字符之间没有空格。 并删除scanf("%ld %s %ld") 中的空格。

    希望这会有所帮助。

    【讨论】:

    猜你喜欢
    • 2021-09-13
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多