2

こんにちは、このテキスト ファイルがあります。文字の最初の列、2 番目と 3 番目の列は整数ですが、値を正しく読み取って印刷することができません。

したがって、このファイルは読み取ろうとしています:

c 6
o 4 3
o 2 4
o 3 2
o 1 1
o 3 3

そして、ここにコードがあります:

#include <stdio.h>
#include <stdlib.h>

#define N 6

int main (int argc, char *argv[]) 
{
  int i;
  int M[N];
  int U[N];
  char c ;
  FILE* fichier = NULL;

  fichier = fopen("pb1.txt","r");

if(fichier!= NULL )
  { 
    while(!feof(fichier))   
    {
    fscanf(fichier, "%c %d %d", &c, &M[i], &U[i]); 

    printf("%c %d %d \n", c, M[i],U[i]);
    }

  }
}

これは、出力がどのように見えるかです

c 6 1472131424 
o 4 3 

 4 3 
o 2 4 

 2 4 
o 3 2 

 3 2 
o 1 1 

 1 1 
o 3 3 

 3 3 

なぜそれが私にこれを与えるのか私にはわかりません。ありがとうございました

4

1 に答える 1

1

ここで最初に目にする問題は、iuninitialized の値を使用していることです。未定義の動作を引き起こします。

詳しく説明するiと、自動ローカル変数であり、明示的に初期化しない限り、不定値になります。それを使用しようとすると、UB につながります。

また、値iを保存および出力するためのインデックスとして使用されることになっている値を増やしたことはありません。

最後に、スキャンした値を使用する前に、常にscanf()and ファミリの戻り値をチェックして、成功することを確認してください。

そうは言っても、なぜ「while ( !feof (file) )」は常に間違っているのかをご覧ください。

于 2016-11-09T15:28:07.323 に答える