我试图从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;
}
目前它甚至无法编译。对于出了什么问题的任何想法?
答案 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)
num
是一个简单的字符而不是数组。因此,您无法使用num[i]
。
由于您只需要文件的前5行而不是整个文件,因此您应该将for循环放在读取之上。 while循环将读取整个文件。
printf语句应为%d,因为它是一个整数。
像这样的东西
for(i=0; i<5; i++) {
if (fscanf(fp, "%d", &num) == 1) {
printf("%d\n", num);
}
}
答案 2 :(得分:0)
可能有不同的方式,例如喜欢
考虑到您已在 .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);
// ...