先前使用cin后,cin未读取任何值 我刚开始用C++ 11入门书,目前在if语句部分。我以前有过java的经验,但是C++的输入输出确实让我困惑。为了方便起见,我将多个练习放在一个文件中。然而,似乎因为我调用了而(cin>>p)它就把我对它下面的问题的输入搞砸了

先前使用cin后,cin未读取任何值 我刚开始用C++ 11入门书,目前在if语句部分。我以前有过java的经验,但是C++的输入输出确实让我困惑。为了方便起见,我将多个练习放在一个文件中。然而,似乎因为我调用了而(cin>>p)它就把我对它下面的问题的输入搞砸了,c++,C++,我使用RePEL.IT作为我的C++代码平台,因此我在我的输入中使用一个分隔符(!)作为输入文件的结尾部分。p> 问题出现在第1.4.4节,这一行:if(std::cin>>currVal){。它不等待输入,而是将其视为无输入并跳过if语句。我尝试将std::cin>>currVal移出if语句,但没有效果(仍然不读取) 以下是我的“程序”的输入/输出示例: 这是我的密码: #include <iostream> int main() { //WHILE LOOPS Secti

我使用RePEL.IT作为我的C++代码平台,因此我在我的输入中使用一个分隔符(!)作为输入文件的结尾部分。p> 问题出现在第1.4.4节,这一行:
if(std::cin>>currVal){
。它不等待输入,而是将其视为无输入并跳过if语句。我尝试将
std::cin>>currVal
移出if语句,但没有效果(仍然不读取)

以下是我的“程序”的输入/输出示例:

这是我的密码:

#include <iostream>

int main() {
  //WHILE LOOPS Section 1.4.1
  //Exercise 1.9
  int sum = 0, i = 50;
  while (i <= 100) {
    sum += i;
    i++;
  }
  std::cout << sum << std::endl;
  //Exercise 1.10
  int j = 10;
  while (j > 0) {
    std::cout << j << std::endl;
    j--;
  }
  //Exercise 1.11
  int k, l;
  std::cout << "Enter 2 Numbers: " << std::endl;
  std::cin >> k >> l;
  while (k <= l) {
    std::cout << k << std::endl;
    k++;
  }
  //FOR LOOPS Section 1.4.2 
  //Exercise 1.12
  int sum1 = 0;
  for (int m = -100; m <= 100; ++m) {
    sum1 += m;
  }
  std::cout << sum1 << std::endl;
  //Exercise 1.13
  int sum2 = 0;
  for (int n = 50; n <= 100; n++) {
    sum2 += n;
  }
  std::cout << sum2 << std::endl;
  for (int o = 10; o > 0; o--) {
    std::cout << o << std::endl;
  }
  //UNKOWN # OF INPUTS Section 1.4.3
  //Exercise 1.16
  std::cout << "Enter as many numbers as you wish" << std::endl;
  int sum3 = 0, p = 0;
  while (std::cin >> p) {
    sum3 += p;
  }
  std::cout << sum3;
  //If Statement Section 1.4.4
  int currVal = 0, val = 0;
  if (std::cin >> currVal) {
    int cnt = 1;
    while (std::cin >> val) {
      if (val == currVal) {
        cnt++;
      } else {
        std::cout << currVal << " has occured " << cnt << " times." << std::endl;
        cnt = 0;
      }
    }
    std::cout << currVal << " has occured " << cnt << " times." << std::endl;
  }
  return 0;
}
#包括
int main(){
//而第1.4.1节
//练习1.9
整数和=0,i=50;

而(i尝试自己实现循环退出,即替换

  int sum3 = 0, p = 0;

  [...]

  while (std::cin >> p) {
    sum3 += p;
  }

intsum3=0,p;
字符串p;
[...]
while(std::cin>>p){
如果(p==“退出”)
打破
字符串流转换(p);
如果(转换>>p)
sum3+=atof(p_);
其他的

STD::CUD<代码>(STD:CIN > P){ /COD>当程序运行时,你是如何跳出这个循环的?你是否发送EOF字符?@ SCOHE01,所以C++入门书做CTRL+Z,然后输入,但是Retro。它使用Ctrl +Z作为“取消当前提示”。.我在谷歌上搜索了一下,发现如果我做一个非整数,它会像一个一样工作。这可能是造成问题的原因,但我会做什么来替换呢?我不确定它在windows上是否相同,但在bash shell中,ctrl-D将发送EOF,这将杀死该循环。当然,任何这些方法都会设置cin的失败位,这正是您的问题…这是一个问题我几乎肯定是重复的,我只是找不到一个好的链接。请看第二个答案,或者前两个答案。不过我认为这个答案最接近你的问题:。
while(std::cin>>p){
--当格式化的提取运算符
>
失败时,
while
循环终止。这会将
std::cin
设置为失败状态。从该点开始,
std::cin
上的所有后续操作将立即失败,直到错误状态被明确清除。这就是为什么后续
if
会这样做的原因esn什么也不做。这是因为
>
操作员立即失败,因为
std::cin
处于失败状态。
  int sum3 = 0, p = 0;

  [...]

  while (std::cin >> p) {
    sum3 += p;
  }
  int sum3 = 0, p_;
  string p;

  [...]

  while (std::cin >> p) {


      if ( p == "exit" )
          break;

      stringstream convert(p);

      if ( convert >> p_ )
          sum3 += atof(p_);

      else
          std::cout << "Invalid number supplied!" << std::endl;
  }