繁体   English   中英

如何确定 C 程序为何输出意外消息?

[英]How to determine why a C program outputs unexpected messages?

我正在尝试在 Eclipse 上的 C 中编程,我已经安装并配置了 MinGW,但是我有一个我不明白的问题:

我有一些简单的代码:

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    int num1,num2;

    setbuf(stdout,NULL);

    printf("enter two numbers");
    scanf("%d%d",&num1,&num2);

    if(num1>num2){
        printf("num1 is greater than num2");

    }else{
        printf("num2 is greater than num1);
    }

    return 0;
}

编译并运行后,它显示“输入两个数字”,我输入两个数字,我看不到任何进一步的 output 和键盘 function 在控制台屏幕上不起作用,它没有给我一个错误,但它确实在控制台上显示了一些奇怪的 output:

<terminated>

<terminated>(exit value: -1.073.741.515) CPS:exe

您没有正确读取值:

scanf("%d%d",num1,num2);

scanf%d格式说明符需要一个int * ,即指向int的指针作为参数。 它需要变量的地址才能将值写入存储该地址的位置。

相反,您传递的是num1num2的当前值,它们本质上是垃圾值,因为尚未写入变量。

你反而想要:

scanf("%d%d",&num1,&num2);

我不知道您发布的代码是否与您编译的完全相同,当我复制并编译您发布的代码时,gcc 在行报错:

printf("num2 is greater than num1);

printf() 中丢失了结束引号; 在我修复了这个错误之后,它运行良好。 我的环境是

Linux DESKTOP-7VH0PN1 5.4.72-microsoft-standard-WSL2 #1 SMP 2020 年 10 月 28 日星期三 23:40:43 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

使用 gcc:

gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 版权所有 (C) 2019 Free Software Foundation, Inc.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM