反转数组[UPDATED],文件扫描

时间:2014-04-05 01:59:59

标签: c arrays file

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

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

3 个答案:

答案 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;
}