问题要求我从文件中扫描一个数组,然后以相反的顺序打印该数组。
我的想法是,我在网上读到,为了反转数组,我可以使用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;
}
答案 0 :(得分: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;
}
FILE1.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]) = %d\n", sizeof(line[0]));
printf("sizeof(line) = %d\n", sizeof(line));
printf("p = %d\n",p);
}
输出:
sizeof(line[0]) = 4
sizeof(line) = 1024
p = 256
似乎sizeof只返回变量指向的内存空间大小。
如果是这样,你就不应该使用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 = %d\n",p);
}
输出:
p = 7 //<---length of "987654\n"
我会在这里停下来。 但这是代码中出现错误的第一个切入点。
答案 1 :(得分:0)
#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, "%d\n", line[i]);
}
fclose(file1);fclose(file2);
return 0;
}
答案 2 :(得分:-1)
对程序进行一些修改后,这将从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 = '\0';
else if((pos = strchr(line,'\0')) !=NULL)
*pos = '\0';
pos = pos-1;
while(pos >=line){
fprintf(file2,"%c",*pos);
pos = pos-1;
}
fprintf(file2,"\n");
}
fclose(file1);
fclose(file2);
return 0;
}