繁体   English   中英

使用fgets()从stdin重定向文件以将信息读取到数组

[英]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;
}
  1. 我看不出在此处使用动态分配作为临时变量的原因。

  2. 如果文件是数字列表,则只是读为数字,此处不需要fgets ,如果您仍想将其读取为字符串,请查看atoi func

  3. sizeof(memory)/sizeof(int) = (sizeof(int)*MEMSIZE)/sizeof(int) = MEMSIZE

  4. 您不仅应该循环MEMSIZE次,还需要知道何时EOF

  5. 我不知道为什么您在打印循环中假设10就足够了,我将其更改为i ,这是元素数量

  6. 您没有定义n

我希望我能帮上忙。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM