1

我试图让用户输入一个文本文件的名称,然后打开该文本文件并读取它的第一行,它告诉将读取多少行并为其分配空间。然后我想将其余的行存储在分配的空间中。我正在使用 MacBook 并使用 Xcode 程序。我正在用 C 语言编写程序。

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


int main()
{
int MMSize, CacheSize, CBLineSize, SetAsso, NumOfLines, *Num;
char    RepPol, FileNam[75];
FILE    *ptr_file;

printf("Enter the name of the input file containing the list of memory references generated by the CPU: "); 

scanf( "%s", FileNam );
fpurge( stdin );

ptr_file = fopen(FileNam, "r");

 while (ptr_file==NULL){
    printf("failed to open file.\nPlease enter a valid file name: ");

    scanf( "%s", FileNam );
    fpurge( stdin );

    ptr_file = fopen( FileNam , "r" );
}   

fscanf(ptr_file, "%d", &NumOfLines);

Num = malloc(sizeof(int) * NumOfLines); 

for (int i=0; i<NumOfLines; i++) {
    fscanf(ptr_file, "%*[^0123456789]%d", &Num[i]);
            printf("%d\n", Num[i]);
}

    free(Num);
fclose(ptr_file);

return 0;
}

我的代码运行良好,但它总是说输入文件为 NULL。我已将输入文件作为 file1.txt 保存在项目的源文件夹中。我尝试输入名称 file1.txt 以及文件的整个位置,并且循环连续运行,因为它说我的文件为 NULL。但是,当我转到查找器中的文件时,它里面有文本。任何人都可以帮我解决这个问题。

这工作的家伙。感谢所有的帮助。

4

1 回答 1

0

这可能更接近您想要的。

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


int main(void)
{
  int  NumOfLines, *Num;
  char FileNam[75];
  FILE *ptr_file = NULL;

  printf("Enter the name of the input file containing the list of memory references generated by the CPU: "); 

  scanf( "%s", FileNam );
  fpurge( stdin );

  ptr_file = fopen(FileNam, "r");

  while(ptr_file == NULL) {
    printf("failed to open file.\nPlease enter a valid file name: ");

    scanf( "%s", FileNam );
    fpurge( stdin );

    ptr_file = fopen( FileNam, "r" );
  }   

  fscanf(ptr_file, "%d", &NumOfLines);

  Num = malloc(sizeof(int) * NumOfLines); 

  for (int i=0; i<NumOfLines; i++) {
    fscanf(ptr_file, "%d", &Num[i]);
    printf("%d\n", Num[i]);
  }

  free(Num);
  fclose(ptr_file);
  return 0;
}

这将采用以下格式的输入文件:

2
123
456

我从您的代码中猜测该格式应该是什么。现在发生的是第一个数字表示还有多少行(因此不包括它自己)。然后程序会尝试读取那么多行。

你犯的一些错误:

  • fopen使用字符串文字而不是同名变量调用
  • do/while当你打算使用 a时使用 awhile
  • Num分配数组时未正确处理指针
于 2012-04-10T17:58:27.093 回答