入力時に2行を期待するアプリをCで作成しました。最初の入力はintの配列の大きさを示し、2番目の入力にはスペースで区切られた値が含まれます。たとえば、次の入力
5
1 2 3 4 99
を含む配列を作成する必要があります{1,2,3,4,99}
そうするための最速の方法は何ですか?私の問題は、文字列全体をループせずに複数の数値を読み取って、それがスペースか数値かを確認することです。
ありがとう。
int i, size;
int *v;
scanf("%d", &size);
v = malloc(size * sizeof(int));
for(i=0; i < size; i++)
scanf("%d", &v[i]);
終わったら忘れずfree(v)
に!
また、何らかの理由ですでに文字列に数字がある場合は、次を使用できますsscanf()
ここで、「N」は配列「A」の配列要素の数です
int N, A[N];
printf("Input no of element in array A: ");
scanf("%d", &N);
printf( "You entered: %d\n", N);
printf("Input array A elements in one line: ");
for(int i=0; i<N; i++){
fscanf(stdin, "%d", &A[i]);
printf( "A[%d] is: %d\n", i, A[i]);
}
これは、私がコンテキストに適合させたhttp://www.cplusplus.com/reference/cstring/strtok/からの例です。
strチェーンをサブチェーンに分割してから、各部分をintに変換します。エントリ行はコンマで区切られた数字であり、他には何もないと思います。サイズは配列のサイズです。scanf( "%d"、&size);を実行する必要があります。デニルソンが彼の答えで述べたように。最後に、すべての値を含むint配列が作成されます。
int main(){
int size = 5, i = 0;
char str[] ="10,20,43,1,576";
int list[size];
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str,",");
list[i] = atoi(pch);
i++;
while (pch != NULL)
{
pch = strtok (NULL, ",");
if(pch != NULL)
list[i] = atoi(pch);
i++;
}
for(i=0;i<size;i++){
printf("%d. %d\n",i+1,list[i]);
}
return 0;
}
scanf()
首の痛みのようなものです。この種の問題をチェックしてくださいstrtol()
、それはあなたの人生をとても楽にします。