gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:13 24 4
gpt4 key购买 nike

我需要制作一个程序,接受两行输入,每行由未指定数量的数字组成,并将每行存储在单独的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com