私はCプログラミングとこのフォーラムにかなり慣れていませんが、試してみようと思いました. 私がやりたいことは、ユーザーに4桁の数字を入力させることです。そこから、必要なときに arr[2] などを呼び出すことができるように、番号を取得して配列に格納したいと考えています。助けてくれてありがとう!
ここで何が起こっているのか本当に知りたいです。再度、感謝します
私はCプログラミングとこのフォーラムにかなり慣れていませんが、試してみようと思いました. 私がやりたいことは、ユーザーに4桁の数字を入力させることです。そこから、必要なときに arr[2] などを呼び出すことができるように、番号を取得して配列に格納したいと考えています。助けてくれてありがとう!
ここで何が起こっているのか本当に知りたいです。再度、感謝します
var1 は整数であり、整数配列 arr の各要素に格納しているため、出力
各数値を文字として保存する場合は fgets を使用し、数値として保存する場合は次のようにします。
i=0;
while(var1){
arr[len-i-1] = var1%10; //len is 4 in your case
var1 /= 10;
i--;
}
あなたのコードは、あなたが思っていることをしません。scanf
コンソールから行を読み取ります。数字(つまり 1、2、3 ) ではなく、数値(つまり 123) に%d
一致します。ループで呼び出します (つまり、1 つの番号を取得して、それを複数回出力します)。printf
scanf
実際には、それ以上だと思います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 文字を超える文字を入力すると、数字を保持するための文字の配列がオーバーフローし、重大なセキュリティ リスクとクラッシュが発生します。
必要な動作を実装するには、多くの可能性があります。これを行う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");
scanf
整数値の読み取りを要求しました。代わりに文字列を読みたいかもしれません。
ピンチでは、次を使用できますfgets
。
char number[5];
if( fgets(number, sizeof(number), stdin) != NULL )
{
for( i = 0; i < 4; i++ ) {
printf( "%c\n", number[i] );
}
}