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

int get_num(int num);
void read_num(int num);

int main()
{
  int num;
  do
  {
    get_num(num);
    if(num == 1)
      read_num(num);

   }while(num != 0);
 }

 int get_num(int num)
 {
   printf("Please enter an integer from 0 and 2\n");
   scanf("%d", &num);
   if (num == 1)
     return num;
 }

 void read_num(int num);
 {
   printf("Hello.\n");
 }

ユーザーが 1 を入力すると、read_num 関数は呼び出されませんか? なぜだか分からない?return num; だと思いました。メインに戻る何番目の番号を返します。num == 0 の場合、プログラムは終了し、num == 1 の場合、read_num 関数を呼び出す必要があります。

4

2 に答える 2

5

あなたのコードにはかなりの誤りがあります: main()andgetNum()は両方とも int を返すと宣言されていますが、main()何もgetNum()返さず、ユーザーが入力した場合にのみ返します1. 以外voidを返す関数がある場合は、考えられるすべての制御フローに適切なreturnステートメントがあることを確認してください。

次に、値による呼び出しと参照による呼び出しの問題があります。これは説明するのに適切な場所ではなく、多くの人が私よりも上手に書いているので、本当に調べてください.

read_num(num); num はここでは定義されていません。C がパラメーターを渡す方法を理解すれば、よりよく理解できるかもしれません。

同じことが戻り値にも当てはまります。C の関数は値を返します ( のように戻り値の型で宣言されます。そのような関数を呼び出すと、値を変数にint get_num()割り当てることができます。main では次のように記述できます。returnint number = get_num()

あなたのコードはそのように見えるかもしれませんが、それが本当にやりたいことなのかどうかはわかりません:

int main()
{
    int num;
    do {
        num = get_num();
        if(num == 1) {
            printf("%d\n", num);
        }   
    } while(num != 0);
    return 0;
}

int get_num(int num)
{
    printf("Please enter an integer from 0 and 2\n");
    scanf("%d", &num);
    if (num == 1)
        return num;
    return 0;
}
于 2013-02-12T23:17:31.933 に答える
4

C は参照渡しではなく値渡しを使用します。そのため、get_num を入力すると、メイン関数の変数「num」に格納されている値の COPY を操作するだけです。get_num で変数「num」の値を操作しても、メイン関数の変数「num」の値は変更されません。

メイン関数で「計算された」値を使用するには、get_num 関数の戻り値をメイン関数の変数「num」に割り当てる必要があります。ライン交換するだけ

get_num(num);

num = get_num(num);

そして、すべてがうまくいくはずです。

EDIT:複数の値を返すには、戻り値の目的の保存場所へのポインターを関数に渡す必要があります。例として、代わりにポインターを使用するプログラムのバリエーションを示します。

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

int get_num(int num);
void read_num(int num);

int main()
{
  int num = 0; /* better give it a defined value here */
  int n_args_read;
  do
  {
    n_args_read = get_num(&num);
    if(n_args_read == 1)
      read_num(num);

   }while(num != 0);
 }

 int get_num(int *num)
 {
   printf("Please enter an integer from 0 and 2\n");
   return scanf("%d", num);
 }

 void read_num(int num);
 {
   printf("Hello.\n");
 }
于 2013-02-12T23:08:18.470 に答える