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



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

我的想法是,我在网上读到,为了反转数组,我可以使用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;
}

相关内容

  • 没有找到相关文章

最新更新