数组中的数字未从文件中的第一个数字开始显示

时间:2019-01-01 20:03:42

标签: c

txt文件包含从2148到9269开始的10000个元素,但是在将它们存储在数组中并显示元素之后,从开始不会打印元素。尽管最后一个元素显示得很好。

我尝试搜索网络,但找不到确切的解决方案。我也尝试了python中的代码。在将元素存储在列表中后,如果显示的话,整个列表输出是完美的,但是如果我将它们从字符串转换为int,然后逐个打印,则会出现同样的问题。

int main() {
    FILE *fp;
    int i,j=0,a[10000];
    long long int c=0;
    char str[MAXCHAR];  //MAXCHAR is defined as 10
    char filename[80] = "C:\\Users\\Akshat\\Desktop\\codes\\C\\QuickSort.txt";

    fp = fopen(filename, "r");
    if (fp == NULL){
        printf("Could not open file %s",filename);
        return 1;
    }
    while(fgets(str, MAXCHAR, fp)!=NULL)
    {
      int len=strlen(str);
      int num=0;
      for(i=1;i<len;i++)
        num+=(str[len-(i+1)]-'0')*pow(10,i);
      a[j]=num/10;
      j++;
    }
    fclose(fp);
    for(i=0;i<10000;i++)
    printf("%d\n",a[i]);
    return 0;
  }

如果我在循环内打印str,也会发生同样的情况。第一个元素从之间的某个位置显示。此外,打印时的元素总数将打印10000,这是正确的。

这是文件的链接-https://d3c33hcgiwev3.cloudfront.net/_32387ba40b36359a38625cbb397eee65_QuickSort.txt?Expires=1546473600&Signature=Tapm7qDg-hFcSkGtF6~zP5uDxoVK3cr4p-vePsnONjcd46aCAS9BZQGAry3gBmAd0upm3WbFJSosVdl1Owj~AY8bhlKvNbyiOMg9oYdko0ax4-PKRtP0NjyXa-Q35equ7YQmp3W4r3RAYb9hO-bQnpX1Q-JNIntYvV3rk4GUmdc_&Key-Pair-Id=APKAJLTNE6QMUY6HBC5A

1 个答案:

答案 0 :(得分:0)

我处理了文件的一小部分,对我来说确实很好。我认为您将元素数量存储在变量j中,应该使用它,而不是在打印循环中使用固定数量10000

#include<stdio.h>
#include<math.h>
#include<string.h>
int main() {
    const int MAXCHAR=10;
    FILE *fp;
    int i,j=0,a[10000];
    long long int c=0;
    char str[MAXCHAR];  //MAXCHAR is defined as 10
    char filename[80] = "test.txt";

    fp = fopen(filename, "r");
    if (fp == NULL){
        printf("Could not open file %s",filename);
        return 1;
    }
    while(fgets(str, MAXCHAR, fp)!=NULL)
    {
      int len=strlen(str);
      int num=0;
      printf("%s",str);
      for(i=1;i<len;i++)
        num+=(str[len-(i+1)]-'0')*pow(10,i);
      a[j]=num/10;
      j++;
    }
    printf("STARTING THE ARRAY PRINT\n");
    for(i=0;i<j;i++)
    printf("%d\n",a[i]);
    return 0;
  }
  

要编译

gcc -o cque cque.c -lm

output
2148
9058
7742
3153
6324
609
7628
5469
7017
504
4092
1582
9572
1542
5697
2081
4218
3130
7923
9595
6558
3859
9832
3062
6788
7578
7432
479
8439
9079
7173
2667
2770
2655
972
4264
2014
3171
STARTING THE ARRAY PRINT
2148
9058
7742
3153
6324
609
7628
5469
7017
504
4092
1582
9572
1542
5697
2081
4218
3130
7923
9595
6558
3859
9832
3062
6788
7578
7432
479
8439
9079
7173
2667
2770
2655
972
4264
2014
3171