【发布时间】:2014-09-15 05:10:28
【问题描述】:
我试图从一行动态地从用户那里获取整数,预期的输入将是:
1 2 31 4 1
上面的输入只是5个整数输入的例子,用户可以输入任意多的数字。
所以,我尝试使用向量来动态存储这些整数。这是我的代码:
#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
vector<int> s;
int d, b;
while(scanf("\n%d", &d) == 1)
s.push_back(d);
printf("\nLength : %d", s.size());
return 0;
}
但是,它没有用。举个例子,我输入了 6 个数字并按回车,我的期望是,它会显示向量的大小,但它却要求我输入另一个输入。我只能通过按Ctrl+D来停止“输入询问”。
令我惊讶的是,这段代码运行良好:
#include <stdio.h>
int main()
{
int d;
while(scanf("\n%d", &d) == 1)
printf("%d ", d);
return 0;
}
所以我的问题是,printf 和 push_back 之间有什么不同导致我的第一个代码不起作用?
注意,scanf 中的 \n 是为了防止尾随换行问题。
【问题讨论】:
-
使用
while(scanf(" %d", &d) == 1)。 -
真正的问题是什么? 首先,我得到了五个长度。第二个,它打印出五个数字。
-
如果您正在编写 C++,为什么要使用
printf和scanf?此外,"%d"scanf格式代码会自动跳过前导空格。 -
@paxdiablo 我对上面代码的期望是,当我插入一些数字时,例如
31 2 14 3,当我按下回车键时,它会显示向量的大小,但是当我按下回车键时程序没有停止,但它正在等待另一个输入 -
@JoachimPileborg 对我的代码的丑陋感到抱歉,这只是 c + c++ 代码像意大利面条一样扔掉,感谢您提供新信息