簡體   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