C程序无法读取文本文件

时间:2017-07-26 04:15:09

标签: c

我制作一个程序,从文本文件中读取数字,按升序排序,然后打印数字列表(按升序排列)和在排序过程中移动的数字。< / p>

最大的问题是我无法让程序甚至读取和打印整个文本文件。我怎么能让程序为初学者整体阅读文本文件?

这是文本文件: 的 data_a5.txt

879
646
80
385
741
57
370
240
111
400
262
678
951
506
720
508
792
863
677
864
70
5
591
440
989
478
867
636
278
827
692
243
806
676
158
550
425
226
783
129
876
714
125
721
164
555
730
146
596
947
174
837
48
589
808
868
694
677
379
62
580
165
956
139
215
14
45
552
98
154
702
661
997
825
363
782
229
915
281
397
295
219
231
476
253
22
873
504
653
698
772
184
453
508
977
863
624
947
104
926

2 个答案:

答案 0 :(得分:1)

请参阅文件I / O上的Stack Overflow上的过去答案。你可以通过多种方式从文本文件中读取文件,包括使用fgets或getline,我建议你学习(参见链接)。不要使用gets()。在这种情况下,请确保您的文件与C文件位于同一目录中。

我可能建议您将这些数字保存到数组中,并且对于文本文件中读取的每一行,在将新的整数或元素分配到当前数组索引之后将其排序到数组中。这样做的问题是你必须知道文件可以提前读取多少个数字。否则,你可以在另一个循环中对它们进行排序。

C read file line by line

int main (void) 
{
FILE * fptr = fopen("data_a5.txt", "r");
int MAXLINE = 4;
char line[MAXLINE] = {0};
int currentInt;

if (fptr == NULL) {
  printf("Could not find file.\n");
  exit(1);
  }

while (fgets(line,MAXLINE,fptr)) {
  if (sscanf(line, "%d", &currentInt) == 1)
  // Successful Read
  else
  // Unsuccessful read

printf("Current line of text: %s\n", line);
printf("Current integer: %d\n", currentInt);
}

fclose(fptr);

return 0;
}

答案 1 :(得分:0)

有很多方法可以读取文件的内容。我们无法对文件本身中的文件内容进行排序,首先我们必须将它移动到数组中,然后我们可以应用排序算法对其进行排序。在这里,我使用了一个&#34;选择排序&#34;技术。我希望这对你有所帮助。如果要在文件中编写已排序的数组,可以轻松编写。 `在这里输入代码

#include<stdio.h>
#include<stdlib.h>

main()
{
    int i, j, k, temp, cnt=0, num=0;
    char *buf,ch;
    int *arr = 0;
    FILE *fp;

    fp = fopen("data","r");
    if(fp == NULL)
    {
        printf("file opening failed\n");
        return 0;
    }

    fseek(fp,0,2);
    cnt = ftell(fp);
    printf("count is %d\n",cnt);
    buf = (char*)calloc(1,cnt);
    fseek(fp,0,0);
    fread(buf, 1, cnt, fp);
    printf("buf content are \n%s\n",buf);
    for(i=0,j=0;buf[i];i++)
    {

        if(buf[i] != '\n')
        {
            num += buf[i]-48;
            num = num * 10;

        }
        else
        {
            num = num/10;
            arr = realloc(arr, i * sizeof(int));
            arr[j++] = num;
            num = 0;
        }
    }
    for(i=0;i<j;i++)
        printf("%d ",arr[i]);
        printf("\n");
for(i=0;i<j-1;i++)
{
    for(k=i+1;k<j;k++)
    {
        if(arr[i]>arr[k])
        {
            temp=arr[i];
        arr[i]=arr[k];
        arr[k]=temp;
        }
    }
}
    for(i=0;i<j;i++)
        printf("%d ",arr[i]);
fclose(fp);
}