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 Do
std::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;