1

ユーザーが入力した数値を暗号化するプログラムを書いています。暗号化の手順は関数によって実行されますが、これを作成する必要があります。問題は、ある関数で取得した値を次の関数で使用する必要があることです。これが私がやろうとしていることです。最初の関数は整数を読み取ります。second は、その整数のすべての桁に 4 を追加します。問題は、最初の関数で入力された整数を 2 番目の関数で使用する方法です。

 void input(int *num)
{
  int numin;
  printf("Please enter an integer greater than 99999: ");
  scanf("%d", &numin);
  while (numin<99999)
    {
      printf("Incorrect input.\n");
      printf("Please enter an integer greater than 99999: ");
      scanf("%d", &numin);
    }    
  num=&numin;
  printf("The number entered is %d\n", numin);
  return;
}
int add4(int num)
{
  int a,b=1,numplus4;
  int i=-1;
  for (numplus4=0; b==0;)
    {
      a=num%10;
      b=num/10;
      num=b;
      a+=4;
      if (a>9)
    a-=10;
      i++;
      numplus4+=a*pow(10, i);
    }
  num=numplus4;
  printf("%d\n", num);
  return num;
}

私はこのトピックについてグーグルで検索しました:しかし、私が得たものはすべて私を助けませんでした.答えのほとんどはJavascriptに関するものですが、私はCを使用しています.

4

3 に答える 3

2

実際には関数から何も返していませんinput

設定されている数値 (正しく設定されていない) へのポインターを渡す代わりに、次のreturnステートメントを使用して値を返す必要があります。

int input(void)
{
    ...

    return numin;
}

次に、次のように使用できます。

int main(void)
{
    int result = add4(input());
    printf("Result is %d\n", result);

    return 0;
}

現在の関数で何も返さない理由は、input関数内でパラメーターnumがその関数に対してローカルであるためです。そのため、(代入などの)変更は、関数が戻ると失われます。

あなたしていることは、未定義の動作に隣接しているため、潜在的に危険です。ポインターがローカル変数を指すようにしたいのですが、関数がそのローカル変数が格納されているメモリを返すと、アクセスできなくなります。

ただし、ポインター引数を使用して値を返すことができます。これは、参照渡しの引数と呼ばれるものです。ただし、ポインターを割り当てるのではなく、逆参照演算子 ( unary *)を使用します。

*num = numin;

ただし、有効にするには、次のように、既に割り当てられている変数のアドレスを渡す必要があります。

int num;
input(&num);  /* Use the address-of operator to create a pointer */

ただし、ポインターとその仕組みについて詳しく知るまでは、この回答の最初の部分のソリューションを使用することをお勧めします。

于 2012-10-27T05:28:09.453 に答える
1

ポインタが指すメモリ位置に入力値を保存するには、ポインタを逆参照する必要があります。

void input(int* num) {
    int numin;
    printf("Please enter an integer greater than 99999: ");
    scanf("%d", &numin);
    while (numin<99999)
    {
       printf("Incorrect input.\n");
       printf("Please enter an integer greater than 99999: ");
       scanf("%d", &numin);
   }    
  printf("The number entered is %d\n", numin);
  *num=numin;  // <-- This line needs the '*' at the beginning
} 
于 2012-10-27T05:33:16.997 に答える
0

変数が静的変数として宣言されている場合、ある関数で取得された値を別の関数で使用できます。

于 2012-10-27T05:53:05.643 に答える