2016-09-26 5 views
-1

私はCの初心者です。ファイルを開いて読み込み、ファイルの各要素を配列に格納しようとしています。次のコードは、それが実際に動作するはずのように思えるが、出力が何らかの理由で私に.txtファイルの入力が機能しない

50 2500

を与えるとき。誰もが私が修正するために必要なものを上の任意のヘルプを提供することができれば、それは非常に...

をいただければ幸いです

+0

[Cのテキストファイルからint値を読み込み](http://stackoverflow.com/questions/4600797/read-int-values –

+0

入力ファイルの人物を含めるために私の投稿を編集したばかりです –

+0

また、「Cのテキストファイルからint値を読み込み」で解決されたソリューションを使用しようとしても機能しません - 私の.txtファイルにカンマが付いている可能性がありますが、他の投稿はすべてintです。 –

答えて

1

あなたがファイルからのfgets()、あなたが引っ張っている文字列(文字配列)を使用する場合区切り文字としての改行文字。 fscanf()はファイルからintを取り出すのにより適しています。

プログラムがmagicSquareArrayの値は[0] whileループの後に「2」ではなく2であり、そして「2」のASCII値のようなもの50

0

例であるので、50は印刷理由この

#include <stdio.h> 

int main(int argc, char *argv[]){ 
    char *input = argv[1];//if(argc > 1) 
    FILE *inputFile = fopen(input, "r"); 

    if (inputFile == NULL){ 
     printf("Cannot open file for reading!\n"); 
     return -1; 
    } 

    int n; 
    fscanf(inputFile, "%d", &n);//if(1== 
    int squareArray[n][n]; 
    int r, c, v; 
    char comma; 
    r = c = 0; 
    while(2==fscanf(inputFile, "%d%c", &v, &comma)){ 
     if(comma == ',' || comma == '\n' && c == n-1){//comma == ',' && c < n-1 
      squareArray[r][c] = v; 
      if(++c == n){ 
       c = 0; 
       ++r; 
      } 
     } else { 
      fprintf(stderr, "input file invalid format\n"); 
      return -2; 
     } 
    } 
    fclose(inputFile); 

    if(r != n || c != 0){ 
     fprintf(stderr, "It could not be read correctly.\n"); 
     return -3; 
    } 

    for(r = 0; r < n; ++r){ 
     for(c = 0; c < n; ++c){ 
      printf("%d ", squareArray[r][c]); 
     } 
     puts(""); 
    } 
    return 0; 
} 
0

あなたはこの機能を使用することができます。

strucT *ReadFromFile (const char *fileName) 
{ 
    printf ("\n***Start function ReadFromFile for file name: %s *** \n" , fileName); 
    strucT *myfilePtr = (strucT*) malloc (sizeof (strucT)); 

    strcpy(myfilePtr->fileName, fileName);  
    myfilePtr->file = fopen (myfilePtr->fileName , "r"); 
    int i = 0; 

    fscanf(myfilePtr->file , "%d", &myfilePtr->rows); 
    printf("rowSize is: %d\n" , myfilePtr->rows); 

    fscanf(myfilePtr->file , "%d", &myfilePtr->colus); 
    printf("culSize is: %d\n" , myfilePtr->colus); 

    myfilePtr->elementNumber = (myfilePtr->rows) * (myfilePtr->colus); 
    printf("arraySize is %ld\n", myfilePtr-> elementNumber); 

// myfilePtr->array = (unsigned char*)malloc(sizeof(unsigned char) * (myfilePtr->elementNumber)); 
    for (i = 0 ; i < myfilePtr->elementNumber; i++) 
      { 
       fscanf(myfilePtr->file, "%1d", (int*) &myfilePtr->array[i]);  
       //printf("%d" , myfilePtr.array[0]); 
      } 
// FOR DEBUG  
for (i = 0 ; i < 12 ; i++) 
     printf ("%d" , myfilePtr->array[i]); 
    printf ("\n"); 

    fclose(myfilePtr->file); 
    printf ("\n***Finish function ReadFromFile for file name: %s *** \n" , fileName); 
    return strucT; 
} 

この機能は、第1および第2のintを読み込み、それらを保存します。 これ以降、彼女は配列valusを読み込みます(各値は1文字です)

関連する問題