[英]Redirecting a file from stdin, using fgets() to read information to array
int main() {
#define MEMSIZE 100
int memory[MEMSIZE] = {0};
int i = 0;
char *temp = malloc(sizeof(100));
fgets(temp, MEMSIZE, stdin);
for (i = 0; i < (sizeof(memory)/sizeof(int)); i++) {
memory[i] = temp[i];
}
for (n = 0; n < 10; n++) { // Print contents
printf("%d - %d\n", n, memory[n]);
}
}
所以今天我有一个似乎很简单的问题。 我正在使用以下命令从stdin中获取文件:
./a.out < filename
我的主要目标是接受文件中提供的数字,并将其存储到一维数组中。 我当前使用的fgets()
可以正常工作,在第一行读取并将这些元素复制到我的1D数组中(它们的ASCII值转换为int)。 现在,要读入我的下一行,如果再次调用fgets()
,则会读取下一行,但是将其存储在与第一个值相同的位置,从而将它们覆盖在位置0-3的数组中。 这些值需要连续存储在我的数组中,直到EOF。
该文件的格式为:
1234
5678
...
#include <stdio.h>
#define MEMSIZE 100
int main() {
int memory[MEMSIZE] = {0};
int i,n;
for (i = 0; i <MEMSIZE; i++){
if(fscanf(stdin,"%d", (memory+i))==EOF){
break;
}
}
//i is the number of ints you got
for (n = 0; n < i; n++) { // Print contents
printf("%d - %d\n", n, memory[n]);
}
return 0;
}
我看不出在此处使用动态分配作为临时变量的原因。
如果文件是数字列表,则只是读为数字,此处不需要fgets
,如果您仍想将其读取为字符串,请查看atoi
func
sizeof(memory)/sizeof(int)
= (sizeof(int)*MEMSIZE)/sizeof(int)
= MEMSIZE
您不仅应该循环MEMSIZE
次,还需要知道何时EOF
我不知道为什么您在打印循环中假设10就足够了,我将其更改为i
,这是元素数量
您没有定义n
我希望我能帮上忙。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.