9

入力時に2行を期待するアプリをCで作成しました。最初の入力はintの配列の大きさを示し、2番目の入力にはスペースで区切られた値が含まれます。たとえば、次の入力

5
1 2 3 4 99

を含む配列を作成する必要があります{1,2,3,4,99}

そうするための最速の方法は何ですか?私の問題は、文字列全体をループせずに複数の数値を読み取って、それがスペースか数値かを確認することです。

ありがとう。

4

5 に答える 5

21
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()

于 2010-03-29T17:12:57.503 に答える
3

ここで、「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]);
}
于 2015-11-21T03:59:13.793 に答える
1

これは、私がコンテキストに適合させた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;
}
于 2013-02-06T16:21:43.470 に答える
0

scanf()首の痛みのようなものです。この種の問題をチェックしてくださいstrtol()、それはあなたの人生をとても楽にします。

于 2010-03-29T17:06:51.470 に答える