【问题标题】:Why am I getting this strange error when typing a number?为什么我在输入数字时会收到这个奇怪的错误?
【发布时间】:2021-10-09 01:41:53
【问题描述】:

这些天我在测试我的 C 知识,我正在编写一个关于 if/else 语句的小程序。

代码应该可以工作(我希望如此),因为它之前编译过几次,但现在由于某种原因它抛出了这个错误:

我的代码:

#include <stdio.h>

void main() { /*int main() { simply brought back the same error, I know it's the right one.*/
    int myNum;
    printf("Enter a number: ");
    myNum == scanf("%d");
    if(myNum > 14) {
        printf("Your number is bigger than 14.");
    } else if(myNum == 14) {
        printf("Your number is equal to 14.");
    } else if(myNum > 14) {
        printf("Your number is smaller than 14.");
    } else {
        printf("Oops, not a number !");
    }
    return 0;

【问题讨论】:

  • 阅读scanf manual 并搜索有关如何使用它的教程。我非常怀疑这段代码可以在任何地方使用。必须是int result = scanf("%d", &amp;myNum);
  • 感谢您的回答,我会尝试并通知您:)
  • 另外,== 是一个比较,而不是一个赋值。
  • 你在手机上写代码吗?
  • @yano 我也想知道。很酷,我猜! (不过,最好不要沉迷于过多的 UB —— 可能会以 demons coming out of the phone 告终!)

标签: c scanf


【解决方案1】:

给初学者的建议:始终在启用警告的情况下进行编译,并注意它们。(我们都曾是初学者,我们都经历了艰难的学习 ;-))。

带有 /G4 的 Visual Studio 提供以下功能:

1>C:\Users\Peter\source\repos\scanf-mistake\scanf-mistake.c(8,20): warning C4473: 'scanf' : not enough arguments passed for format string
1>C:\Users\Peter\source\repos\scanf-mistake\scanf-mistake.c(8,20): message : placeholders and their parameters expect 1 variadic arguments, but 0 were provided
1>C:\Users\Peter\source\repos\scanf-mistake\scanf-mistake.c(8,20): message : the missing variadic argument 1 is required by format string '%d'
1>C:\Users\Peter\source\repos\scanf-mistake\scanf-mistake.c(8,11): warning C4553: '==': result of expression not used; did you intend '='?
1>C:\Users\Peter\source\repos\scanf-mistake\scanf-mistake.c(21,5): warning C4098: 'main': 'void' function returning a value
1>C:\Users\Peter\source\repos\scanf-mistake\scanf-mistake.c(5): fatal error C1075: '{': no matching token found

第一个是这里的关键:您缺少scanf 应该存储输入的地址。接下来的两个是有助于解释它的尝试。

'==': result of expression not used; did you intend '='? 恰到好处。 == 是逻辑比较。在 C 中,使用简单的表达式而不是“语句”是完全合法的;事实上,C 有点奇怪,我认为,所有不是声明的“语句”实际上都是表达式:如果 iinti=10 是整数表达式,可以用作作业右侧:int k = i = 10;。同样的方式myNum == scanf("%d", &amp;i) 是一个整数表达式,可以用于例如if(myNum == scanf("%d", &amp;i)) { /* use i */ }。阅读 scanf 文档 (google man scanf) 以了解它返回的内容:它不是扫描的值。

'main': 'void' function returning a value 为真:main 应声明为返回 int。

最后一个错误可能只是复制/粘贴错误:您可能忘记复制右花括号了。

【讨论】:

    猜你喜欢
    • 2011-07-05
    • 2021-11-04
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    相关资源
    最近更新 更多