1

私はCプログラミングとこのフォーラムにかなり慣れていませんが、試してみようと思いました. 私がやりたいことは、ユーザーに4桁の数字を入力させることです。そこから、必要なときに arr[2] などを呼び出すことができるように、番号を取得して配列に格納したいと考えています。助けてくれてありがとう!

ここで何が起こっているのか本当に知りたいです。再度、感謝します

4

4 に答える 4

1

var1 は整数であり、整数配列 arr の各要素に格納しているため、出力

各数値を文字として保存する場合は fgets を使用し、数値として保存する場合は次のようにします。

i=0;
while(var1){
     arr[len-i-1] = var1%10; //len is 4 in your case
     var1 /= 10;
     i--;
}
于 2013-02-15T05:13:41.740 に答える
1

あなたのコードは、あなたが思っていることをしません。scanfコンソールから行を読み取ります。数字(つまり 1、2、3 ) ではなく、数値(つまり 123) に%d一致します。ループで呼び出します (つまり、1 つの番号を取得して、それを複数回出力します)。printfscanf

実際には、それ以上だと思いますinteger-C++では数字を意味すると想定しています。4 つの整数の配列は 4 桁の数値を保持しません。それぞれが (通常) -2147483648 から +2147483648 までの 4 つの個別の整数を保持します。

問題は、数値を数字に分割するのは簡単ではないということです。コンピューターが基数 2 (2 進数) で考えるのに対し、「数字」は基数 10 (10 進数) であるためです。代わりにできることは、数値と数字をテキストとして読み書きすることです。整数を文字列として読み取り、各桁を文字として書き込みます。

#include <stdio.h>

int main()
{
    char input[4];

    //get input as text, instead of as a number
    printf ("Please enter a 4 digit number: ");
    scanf ("%s", input);

    for ( int i = 0; i < 4; i++ )
    {
        //print as char instead of as number
        printf ("%c\n", input[i]);
    }
}

このコードは完全ではありません。ユーザーが「blah」と入力すると、数値以外の入力について文句を言う代わりに、「b」「l」「a」「h」が出力されます。ユーザーが 4 文字を超える文字を入力すると、数字を保持するための文字の配列がオーバーフローし、重大なセキュリティ リスクとクラッシュが発生します。

于 2013-02-15T04:42:52.190 に答える
1

必要な動作を実装するには、多くの可能性があります。これを行う1つの方法は次のとおりです。

int arr[4];
int i;
char var1[4];

printf("Please enter a 4 digit number: ");
scanf("%s", var1);

for (i = 0; i < 4; i++ ) {
    arr [i] = var1[i] - '0'; // convert char to int
    printf("%d", arr[i]);
}
printf("\n");
于 2013-02-15T04:47:19.743 に答える
0

scanf整数値の読み取りを要求しました。代わりに文字列を読みたいかもしれません。

ピンチでは、次を使用できますfgets

char number[5];
if( fgets(number, sizeof(number), stdin) != NULL )
{
    for( i = 0; i < 4; i++ ) {
        printf( "%c\n", number[i] );
    }
}
于 2013-02-15T04:43:49.843 に答える