c - 从 ./{base} < input.txt 中的多行输入获取数据的问题

标签 c command-line multiline

我遇到了一个问题,我尝试对其进行研究,但无法真正找到我正在寻找的答案。

我正尝试在 C 中以这种方式接收多行文本文件

./{base_name} < input.txt

input.txt 包含

54
37
100
123
1
54

我已经通过实践得到它了

scanf("%[^\t]",s);

但我想获取每个数字并将 C 字符串解析为一个整数数组,也许可以使用 atoi()。我非常不确定该怎么做。

现在我的代码是这样的

int main(int argc, char *argv[]){
   char str[1000];
   scanf("%[^\t]",str);
   printf("%s\n", str);
}

有没有办法利用 argc 和 **argv 来做到这一点,或者采用另一种巧妙的方法来获取输入并将其制成一个 int 数组。

我正在编译:

gcc -w --std=gnu99 -O3 -o {base_name} {file_name}.c -lm

最好的办法就是将其作为 .txt 文件并使用 fopen 等,但作业要求我将输入作为 ./{base_name} < input.txt

我得到了一个有效的答案。除此之外,我还有这段代码也运行良好。但是会推荐接受的答案,因为它定义了输入数组的大小。非常感谢您的帮助。

#include <stdio.h>
int main(){
    char s[100];
    int array[100];
    while(scanf("%[^\t]",s)==1){
        printf("%s",s);
    }
    return 0;
}

最佳答案

为什么不直接将输入读取为整数?

//test.c
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[]){
   int n;
   int i;
   int *arr;

   /*Considering first value as number of elements */
   /*Else you can declare an array of fixed size */
   fscanf(stdin,"%d",&n);
   arr = malloc(sizeof(int)*n);

   for(i=0;i<n;i++)
    fscanf(stdin,"%d",&arr[i]);


   for(i=0;i<n;i++)
    printf("%d ",arr[i]);

    free(arr);
    return 0;
}

现在使用:

./test < input.txt

假设输入.txt:

6  <- no. of elements (n)
54
37
100
123
1
54

关于c - 从 ./{base} < input.txt 中的多行输入获取数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18450781/

相关文章:

c - 使用带指针的结构的问题

c - 缓冲区溢出 : EIP and jump correctly set but segfault

C 链表 - 在内存块中创建节点

python3 -c 带有长 cmd 字符串 : Trying to resolve invalid syntax

python - 在 Python 中退出到命令行

command-line - 在For循环中退出-Windows命令处理器(CMD.EXE)

android - 具有多行支持的 Textview 自动调整

c - WinDivert 忽略 Tor 流量

flash - 多行手写

c# - C# 中的 XML 多行注释 - 我做错了什么?