先前使用cin后,cin未读取任何值 我刚开始用C++ 11入门书,目前在if语句部分。我以前有过java的经验,但是C++的输入输出确实让我困惑。为了方便起见,我将多个练习放在一个文件中。然而,似乎因为我调用了而(cin>>p)它就把我对它下面的问题的输入搞砸了
我使用RePEL.IT作为我的C++代码平台,因此我在我的输入中使用一个分隔符(!)作为输入文件的结尾部分。p> 问题出现在第1.4.4节,这一行:先前使用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
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;
}