gpt4 book ai didi

c - 反转数组[更新],文件扫描

转载 作者:行者123 更新时间:2023-11-30 18:13:41 25 4
gpt4 key购买 nike

问题要求我从文件中扫描数组,然后以相反的顺序打印该数组。

这个想法是我在网上读到的,为了反转数组,我可以使用 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]) = %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"

我就到此为止吧。但这是代码中错误的第一个入口点。

关于c - 反转数组[更新],文件扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22875714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com