[英]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
的指针作为参数。 它需要变量的地址才能将值写入存储该地址的位置。
相反,您传递的是num1
和num2
的当前值,它们本质上是垃圾值,因为尚未写入变量。
你反而想要:
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.