我尝试使用命令行参数打开文件并读取我在“测试数据”中的数字。反向文件测试数据文件中的数字包括:
2
20
200
2000
20000
-2
-20
-200
-20000.
这是我到目前为止编写的代码。文件打印出来,显然不是相反的。我假设我在某处错过了一个for循环。我也在考虑,我应该使用fscanf
代替fgets
。任何意见都表示赞赏。
#include <stdio.h>
#define MAX_NUMS 1000
int main(int argc, char *argv[]) {
Int a, n;
char buf[MAX_NUMS];
Int array[MAX_NUMS];
file *pt;
if (argc < 2) {
printf("Usage %s <files..>\n");
}
if ((pt = fopen(argv[1], "r")) == NULL) {
printf("Unable to open %s for reading.\n", argv[1]);
Return 1;
}
while (fgets(buf, MAX_NUMS, pt) != NULL){
printf("%s", buf);
}
for(j = 0; j < MAX_NUMS; j++){
If(fscanf(pt, "%d", &array[a]) != 1);
Break;
For(a = n; a--> 0;){
Printf("%d", array[a]);
}
fclose(pt);
retuern 0;
}
答案 0 :(得分:2)
使用while(fscanf("%d", &n)){ a[i++] = n; }
之前i
启动0
并将a
声明为整数数组。稍后打印时,按相反顺序打印。尽管您可以使用fseek()
转到文件的末尾,但无法从相反的顺序读取。
答案 1 :(得分:0)
您的代码中存在一些问题:
流类型拼写为FILE
。
如果出现错误,您不会从main()
函数返回。程序继续运行,你有不确定的行为。
第一个printf()
中缺少一个参数。
return
声明中有拼写错误。
您可以定义要处理的最大数字,为数字定义数组,并使用循环索引存储数字,然后以相反的顺序打印它们。
以下是一个例子:
#include <stdio.h>
#define MAX_NUMBERS 1000
int main(int argc, char *argv[]) {
int array[MAX_NUMBERS];
int i, n;
FILE *pt;
if (argc < 2) {
printf("Usage %s <files..>\n", argv[0]);
return 1;
}
if ((pt = fopen(argv[1], "r")) == NULL) {
printf("Unable to open %s for reading.\n", argv[1]);
return 1;
}
for (n = 0; n < MAX_NUMBERS; n++) {
if (fscanf(pt, "%d", &array[n]) != 1)
break;
}
for (i = n; i-- > 0;) {
printf("%d\n", array[i]);
}
fclose(pt);
return 0;
}