1

gccでubuntu 12.04 ltsを使用しています。この ANSI C コードをコンパイルすると、エラーや警告は表示されませんが、.out ファイルを実行しようとすると、いくつかのジャンク値が表示されます。このプログラムの何が問題なのか、誰か教えてもらえますか?

#include <stdio.h>

int get_int(void);

int main (void)
{
    int ret;
    ret = get_int ;
    putchar(ret);
    printf("\n");
    return 0 ;
}

int get_int(void)
{
    int input;
    char ch;
    while ((scanf("%d", &input)) != 1)
    {
        while ((ch = getchar()) != '\n')
          putchar(ch); 

        printf(" is not an integer.\nPlease enter an ");
        printf("integer value, such as 25, -178, or 3: ");

    }
    return input;
}
4

2 に答える 2

3

関数呼び出しに括弧がありません。これ:

ret = get_int ;

次のようにする必要があります。

ret = get_int();

また、 と の両方がgetchar()であり、 ではありませputchar()ん。intchar

コンパイラがこれらのこと、特に最初のものについて警告しない場合は、新しいものが必要か、警告レベルを上げる必要があります。

また、Gangadhar が指摘しているように、現在は整数を読み込んで文字として出力しているため、たとえば ASCII を使用するシステムでは、入力68すると が出力されます。Dこれは必要な動作である可能性がありますが、おそらくそうではないため、そうでない場合は yourputchar()を への呼び出しに置き換えてくださいprintf()

于 2013-09-07T14:12:37.417 に答える
1

以下の 2 つのステートメントは正しくありません

  ret = get_int ;
  putchar(ret);  

以下のように修正します

    ret = get_int () ;
   printf("%d\n", ret);

上記では、ret =get_int ; これはコンパイラがポインタを整数に格納することを示しています(関数名自体が関数を指しています)そしてその場所で関数を呼び出す必要があります.hereあなたの関数は引数を必要としなかったので、あなたの呼び出しは空でなければなりません関数名の前に括弧を付けます。2つ目は、putchar関数を使用して整数値を出力していることです。指定子を使用する必要がありprintfます%d

于 2013-09-07T14:21:09.143 に答える