1

入力の最初の行には、1 つの整数が含まれます。各入力の後には、それぞれが 1 000 000 を超えない 2 つの整数を含む行が続きます。最初の整数 n はベクトルのサイズで、2 番目の整数 m は情報を登録する行の数です。次の各行には、それを示す 2 つの整数 x と y が含まれています。行内の任意の 2 つの整数は、1 つの空白で区切られます。行には、最後の改行を除いて、他の文字は含まれていません

そのため、ベクトル内の位置として x を選択しました。x は構造体に格納されnum1my_structy は構造体に格納されます。num2

typedef struct my_struct{
  int num1;
  int num2;
  bool my_bool;
} my_struct;


int main(){
   int testCase, sizeVector, numLines, num1_in, num2_in, linesScanned = 0;
   scanf("%d\n %d %d", &testCase, &sizeVector, &numLines);

   my_struct my_vector[sizeVector+1];

   my_vector[0].num1 = testCase;
   my_vector[0].num2 = 0;
   my_vector[0].my_bool = false;

   while (linesScanned < numLines) {
      scanf("%d %d\n ", &num1_in, &num2_in);
      my_vector[num1].num1 = num1_in;
      my_vector[num1].num2 = num2_in;
      my_vector[num1].my_bool = false;
      linesScanned++;

   }}

入力例:

1
3 2
1 2
2 3

私の問題は、最初scanfはうまく機能しますが、ループのオンは機能しないことです。必要に応じて値を保存しません

4

3 に答える 3

1

2番目を変更しscanf()ます:

scanf("%d %d\n ", &num1_in, &num2_in);

scanf(" %d %d", &num1_in, &num2_in);

実際、2番目scanf()の時点では、整数の読み取りを開始する前に改行をキャッチしません。改行は入力に入力されますが、最初の行scanf()でも2番目の行でもキャッチされませんscanf()

2番目の文字列形式の先頭にスペースを追加すると、scanf()空白(スペース、タブ、新しい行など)がキャッチされます。

于 2013-03-12T16:44:36.497 に答える
1

コードを変更して、関数内の\nを削除しscanfます。実際、スペースを取り除くこともできます。%d入力ですべての空白を使用する場合、無視されます。

また、配列インデックスをインクリメントしているようには見えません。

于 2013-03-12T16:45:18.997 に答える
1

2番目scanfは次のようになります。

scanf(" %d %d", &num1_in, &num2_in);
于 2013-03-12T16:48:40.273 に答える