2016-09-26 104 views
-1

所以我是C的初学者,我试图打开并读取文件,将文件的每个元素存储在一个数组中。下面的代码似乎应该在实际工作中,但是当输出给我读取.txt文件输入不工作

50 2500

无论出于何种原因。如果有人可以提供我需要什么,以解决任何帮助,这将不胜感激

...

+0

可能重复的[从C中的文本文件读取int值](http://stackoverflow.com/questions/4600797/read-int-values - 从文本文件中的c) –

+0

我刚刚编辑我的帖子,以包括输入文件的人 –

+0

此外,试图使用“从C中的文本文件读取int值”中提出的解决方案不起作用 - 可能是因为我的.txt文件有逗号,而其他帖子都是整数。 –

回答

1

当您从文件用fgets(),你拉字符串(字符数组)与换行符作为分隔符。 fscanf()将更适合从文件中提取内容。

程序打印50的原因是因为magicSquareArray的值[0] while循环后为“2”,而不是2,和“2”的ASCII值是50。

0

一个例子类似这

#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; 
} 

这个函数读取第一和第二int和保存。 在此之后,她读取数组值(每个值为1个字符)