c - C中读取多行多个数字(不指定数字的数量)

标签 c linux

我需要制作一个程序,接受两行输入,每行由未指定数量的数字组成,并将每行存储在单独的 vector (int*) 中。

不允许使用字符串存储输入,然后将其转换为int。

它必须在 linux 环境中工作,实际上我已经使用以下代码在 Windows 上解决了它:

int t,s1=0,s2=0;
char tx;
int* a=(int*)malloc(0);
int* b=(int*)malloc(0);
scanf("%i%c",&t,&tx);
while(tx!='\n')
{
    a=(int*)realloc(a,sizeof(int)*(s1+1));
    a[s1++]=t;
    scanf("%i%c",&t,&tx);
}
a=(int*)realloc(a,sizeof(int)*(s1+1));
a[s1++]=t;
scanf("%i%c",&t,&tx);
while(tx!='\n')
{
    b=(int*)realloc(b,sizeof(int)*(s2+1));
    b[s2++]=t;
    scanf("%i%c",&t,&tx);
}
b=(int*)realloc(b,sizeof(int)*(s2+1));
b[s2++]=t;

我已经在 linux 上测试过它,至少对我来说,它不起作用。

非常感谢您的帮助,非常感谢!

最佳答案

我在 Linux 上试过你的程序,对我来说,它有效。我使用了以下输入文件:

1 2 3
4 5

我在 gdb 中运行它,在最后一条语句之后,调试器给出了以下值:

(gdb) print s1
$4 = 3
(gdb) print s2
$5 = 2
(gdb) print a[0]
$6 = 1
(gdb) print a[1]
$7 = 2
(gdb) print a[2]
$8 = 3
(gdb) print b[0]
$9 = 4
(gdb) print b[1]
$10 = 5
(gdb) 

但是如果输入数据中有尾随空白,代码可能会失败。

您也不检查 scanf() 的返回值,因此如果 scanf() 失败,它可能会进入无限循环,例如由于早期的 EOF。

如果您使用 Windows 行结尾 (\r\n) 从文件中为程序提供输入数据,您也可能会遇到问题。

我还建议使用 do {} while (tx!='\n') 循环,因为它消除了重复代码。

关于c - C中读取多行多个数字(不指定数字的数量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40291360/

相关文章:

linux - BASH - 如何让它始终从系统启动和崩溃重启时运行?

c++ - 英特尔 PIN :Initial Set up of Intel PIN tool

c - 将类型作为参数,如 C 中的 va_arg

c - if语句中的执行顺序

c - 我的代码需要帮助,它给了我一个错误控制可能到达非空函数的结尾

c90、POSIX 和clock_gettime

c++ - libusb中断传输

linux - Linux 3.+中Linux 2.6对应的/dev/dsp在哪里?

c - 如何在C中的结构中的双指针中使用malloc()

linux - 我尝试重新安装 yarn ,但重新安装后我发现这个问题,错误 : Cannot find module '/home/fiii/.yarn/releases/yarn-1.22.17.cjs'