这个问题要求我扫描文件中的数组,然后以相反的顺序打印该数组。
我的想法是,我在网上读到,为了反转数组,我可以使用for
循环,简单地向后打印数组,而不是实际反转它。但是,我遇到了一个问题,它根本不打印任何东西。我使用了 sizeof 运算符,因为我试图找到一种方法来找出数组中有多少元素,因为 file1 中的元素数量可能是随机的。
到目前为止,我的代码是:
#include<stdio.h>
int main(){
int line[256];
int i, p, k;
FILE *file1=fopen("f1.txt","r");
FILE *file2=fopen("file2.txt","w");
fgets(line,256,file1);
p=sizeof(line)/sizeof(line[0]);
k=p-1
for(i=k;i>=0;i--){
fprintf(file2,"%d",line[i]);
}
return 0;
}
首先,你的代码是这样的:
int main(){
int line[256];
int i, p, k;
FILE *file1=fopen("file1.txt","r");
FILE *file2=fopen("file2.txt","w");
fgets(line,256,file1);
p=sizeof(line)/sizeof(line[0]);
k=p-1;
for(i=k;i>=0;i--){
fprintf(file2,"%d",line[i]);
}
return 0;
}
文件1.txt:
987654
32
1
我想你想反转每行的字符串。你想知道你的代码哪里出了问题。我将向您展示代码中错误的地方。
看看使用 sizeof
时会发生什么。
int main(){
int line[256];
int i, p, k;
FILE *file1=fopen("file1.txt","r");
FILE *file2=fopen("file2.txt","w");
fgets(line,256,file1);
p=sizeof(line)/sizeof(line[0]);
printf("sizeof(line[0]) = %dn", sizeof(line[0]));
printf("sizeof(line) = %dn", sizeof(line));
printf("p = %dn",p);
}
输出:
sizeof(line[0]) = 4
sizeof(line) = 1024
p = 256
似乎大小返回只是可变点的内存空间大小。如果是这样,则不应使用 sizeof
,因为您需要字符串的长度。
使用strlen
简短的回答是使用strlen
。
int main(){
char line[256];//<---changed here
int i, p, k;
FILE *file1=fopen("file1.txt","r");
FILE *file2=fopen("file2.txt","w");
fgets(line,256,file1);
p=strlen(line);
printf("p = %dn",p);
}
输出:
p = 7 //<---length of "987654n"
我就到此为止。但这是代码中错误的第一个入口点。
#include <stdio.h>
int main(){
int line[256];
int i, p, k;
FILE *file1=fopen("f1.txt","r");
FILE *file2=fopen("file2.txt","w");
k=0;
for(i=0;i<256 && fscanf(file1, "%d", &p)==1;++i){
line[k++] = p;
}
for(i=k-1;i>=0;--i){
fprintf(file2, "%dn", line[i]);
}
fclose(file1);fclose(file2);
return 0;
}
对程序进行一些修改后,这将从 file1 读取并反转 file1 中的所有字符串并将它们放入 file2 中
#include<stdio.h>
#include <string.h>
int main(){
char line[256];
int i, p, k;
FILE *file1=fopen("f1.txt","r");
FILE *file2=fopen("file2.txt","w");
char *pos;
while(fgets(line,256,file1)!= NULL){
//p=sizeof(line)/sizeof(line[0])//always 256, sizeof line[0] = 1;
if ((pos=strchr(line, 'n')) != NULL) //remember fgets returns a n if its end of line
*pos = ' ';
else if((pos = strchr(line,' ')) !=NULL)
*pos = ' ';
pos = pos-1;
while(pos >=line){
fprintf(file2,"%c",*pos);
pos = pos-1;
}
fprintf(file2,"n");
}
fclose(file1);
fclose(file2);
return 0;
}