我试图让用户输入文本文件的名称然后打开该文本文件并读取它的第一行,它告诉我们将读入多少行并为其分配空间。然后我想将其余的行存储在分配的空间中。我正在使用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。但是当我在finder中找到文件时,它中有文本。任何人都可以帮我这个。
这个有用的人。感谢所有的帮助。
答案 0 :(得分: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
while
Num
数组