C++;产生额外输入 我是C++新手,试图解决一些基本的编码问题。我正在工作。我通过管道进出编译的可执行文件来运行代码(在unix环境中): /compiled.programoutput\u file.out
这是我的输入(C++;产生额外输入 我是C++新手,试图解决一些基本的编码问题。我正在工作。我通过管道进出编译的可执行文件来运行代码(在unix环境中): /compiled.programoutput\u file.out,c++,std,cin,C++,Std,Cin,这是我的输入(input\u file.in): 我希望产出: test a is this foobar base your all 但是,我得到了输出(output\u file.out): (是的,一开始的空白是有意的) 以下是我的源代码: #include <string>
input\u file.in
):
我希望产出:
test a is this
foobar
base your all
但是,我得到了输出(output\u file.out
):
(是的,一开始的空白是有意的)
以下是我的源代码:
#include <string>
#include <iostream>
int main()
{
int number_of_cases;
std::cin >> number_of_cases;
for (int i=1; i<=number_of_cases; i++) {
std::cerr << i << std::endl;
std::string input = "";
std::getline(std::cin, input);
while (true) {
int pos = input.find_last_of(" ");
if (pos == -1) {
std::cout << input;
break;
}
std::cout << input.substr(pos+1)+" ";
input.resize(pos);
}
std::cout << std::endl;
}
return 0;
}
#包括
#包括
int main()
{
案件的整数;
性病::cin>>病例数;
对于(inti=1;i
std::cin >> number_of_cases;
读入3
但在那里停止,在流中留下换行符
所以对于i==1
,std::getline(std::cin,输入)
只读取第一行末尾的换行符。由于它不包含空格,因此在程序和示例输入中触发std::cout,当您输入“3”时,我正好输入一个字符3和一个字符“\n”。因此cin
只读取整数字符,并将“\n”留在输入缓冲区中。std::getline
>在第一次迭代中读取“\n”。您是否尝试在第行std::cin>>中设置断点;
并逐步执行整个程序,检查变量?Matt,我正在处理这个问题!Shlublu,我正在用Vim开发并用g++编译,所以我不相信这是可能的。如果我需要,请纠正我“我错了!您建议如何进行虚拟调用?std::string s;std::getline(std::cin,s);
如果在std::cin.ignore();
之后调用std::cin>>案例数;
,而不是在getline()中添加调用,则代码更易于阅读和理解。”
;另一种选择是将第一行作为字符串读取(无需忽略),然后将字符串转换为int(如果转换失败则退出)@CorbinMc Dostd::cin>>std::ws
,以清除换行符。
#include <string>
#include <iostream>
int main()
{
int number_of_cases;
std::cin >> number_of_cases;
for (int i=1; i<=number_of_cases; i++) {
std::cerr << i << std::endl;
std::string input = "";
std::getline(std::cin, input);
while (true) {
int pos = input.find_last_of(" ");
if (pos == -1) {
std::cout << input;
break;
}
std::cout << input.substr(pos+1)+" ";
input.resize(pos);
}
std::cout << std::endl;
}
return 0;
}
std::cin >> number_of_cases;