如何从C中的.txt文件中读取和打印前5个整数?

时间:2016-05-16 08:37:02

标签: c pointers arguments fopen scanf

我试图从C中的.txt文件中读取并打印前五个整数。 我有一些文件,其中包含我需要能够使用命令行参数读取的不同整数的列表。

例如,如果我输入

./firstFive 50to100.txt

[文件50to100.txt包含由新行分隔的整数50-100]

所以程序应该打印 -

50
51
52
53
54

由于有几个不同的文件要读(所有文件都包含整数),我使用" fp"作为一个catch来打开从argv [1]指定的文件。

这是我到目前为止所拥有的 -

#include <stdio.h>

int main(int argc, char *argv[]) {
FILE *fp;
int num;
int i;

if (argc < 2) {
    fprintf(stderr, "Usage: %s <filename>\n", argv[0]);
    return 1;
}

fp = fopen(argv[1], "r");
if (fp == NULL) {
    fprintf(stderr, "%s: unable to open file %s,\n", argv[0], argv[1]);
    return 1;
}

while (fscanf(fp, "%d", &num) == 1) {
    for(i=0; i<5; i++) {
        printf("%c/n", num[i]);
    }
}

fclose(fp);
return 0;
}

目前它甚至无法编译。对于出了什么问题的任何想法?

4 个答案:

答案 0 :(得分:2)

编译器不会喜欢这个:

int num;
...
for(i=0; i<5; i++) {
    printf("%c/n", num[i]);
}

因为那是试图读取组成整数的字节,这不是你的意图(我相信),编译器不会希望你试图将int视为一个数组。

这应该有效:

unsigned count = 0;
while (count < 5 && fscanf(fp, "%d", &num) == 1) {
    printf("%d\n", num);
    count++;
}

它基本上将5加到循环中。

答案 1 :(得分:2)

  1. num是一个简单的字符而不是数组。因此,您无法使用num[i]

  2. 由于您只需要文件的前5行而不是整个文件,因此您应该将for循环放在读取之上。 while循环将读取整个文件。

  3. printf语句应为%d,因为它是一个整数。

  4. 像这样的东西

    for(i=0; i<5; i++) {
       if (fscanf(fp, "%d", &num) == 1) {
          printf("%d\n", num);
       }
     }
    

答案 2 :(得分:0)

可能有不同的方式,例如喜欢

  1. 使用 fscanf
  2. 使用读/写函数,然后将ascii转换为整数 等
  3. 考虑到您已在 .txt 文件中按此顺序存储了字符串。

    ...
    40
    50
    60
    70 
    ....
    

    然后做出以下更改。

    int main(int argc, char *argv[]) {
    FILE *fp;
    int num;
    int i = 5;
    
    if (argc < 2) {
        fprintf(stderr, "Usage: %s <filename>\n", argv[0]);
        return 1;
    }
    
    fp = fopen(argv[1], "r");
    if (fp == NULL) {
        fprintf(stderr, "%s: unable to open file %s,\n", argv[0], argv[1]);
        return 1;
    }
    
    while (fscanf(fp, "%d", &num) ==1 && i-- >= 1) {
                printf(" %d \n", num);
        }
    
    fclose(fp);
    return 0;
    }
    

    此外,请参阅下面的Scanf功能链接

    http://www.tutorialspoint.com/c_standard_library/c_function_fscanf.htm

答案 3 :(得分:0)

你可能正在寻找这样的东西:

//...
int num;    //don't need an array for reading a single number

for (int i = 0; i < 5; i++){       //if you know you need just five numbers set it in the counter
    if(fscanf(fp, "%d", &num) == 1)//read about fscanf() and EOF check
    printf("%d\n", num);           //read about printf()
}

fclose(fp);
// ...