我刚开始使用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;
}
答案 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转换。