在使用cin之前,cin没有读取任何值

时间:2018-03-22 00:38:39

标签: c++

我刚开始使用C ++ 11入门书,目前在if语句部分。我以前有使用Java的经验,但C ++输入/输出真的让我很困惑。为方便起见,我将多个练习放在一个文件中。但是,似乎自从我打电话给while (cin >> p)之后,它就把它的输入搞砸了。

我使用repel.it作为我的C ++代码平台,因此我使用分隔符(!)作为我输入的UNKOWN#OF INPUTS第1.4.3节问题的文件结尾。

问题出现在1.4.4节,这一行:if (std::cin >> currVal) {。它不等待输入,而只是将其视为无输入并跳过if语句。我尝试将std::cin >> currVal移出if语句无效(仍然没有读取)。

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

3825
10
9
8
7
6
5
4
3
2
1
Enter 2 Numbers: 
 6 9
6
7
8
9
0
3825
10
9
8
7
6
5
4
3
2
1
Enter as many numbers as you wish
 5 4 3 2 1 5!
20 

这是我的代码:

#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;
}

1 个答案:

答案 0 :(得分:1)

尝试自己实现循环退出。即取代

  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;
  }

现在你可以输入&#34;退出&#34;并将其发送为好像是一个数字,而不是发送一些可能会破坏的EOF字符。 std::cin并将其设置为失败。

请确保您#include <sstream>,以便stringstream字符串转换为int转换。