for(int i=0;i<50;i++,size++)
{
cin >> inputnum[i];
cout << size;
if(inputnum[i] == '.')
{
break;
}
}
中断会破坏输入流,但大小会保持输出。
大小的输出为012345678910111213...474849
。
我尝试将size ++放在循环中,但没有区别。之后的大小将等于50,这意味着它经历了完整的循环。
我忘了解释我添加了cout&lt;&lt;循环中的大小,用于调试/检查循环后输出为50的原因,即使我只输入了3个数字。
答案 0 :(得分:0)
我怀疑inputnum
是int
(或其他一些数字类型)的数组。当您尝试输入'.'
时,实际上没有任何内容进入inputnum[i]
- cin >> inputnum[i]
表达式实际上失败并将cin
置于失败状态。
因此,输入inputnum[i]
字符时'.'
不会更改,break
永远不会被执行。
以下是一个小型完整程序中稍微修改过的代码版本,演示如何使用!cin.good()
打破输入循环:
#include <iostream>
#include <ostream>
using namespace std;
int main()
{
int inputnum[50];
int size = 0;
for(int i=0;i<50;i++,size++)
{
cin >> inputnum[i];
if (!cin.good()) {
break;
}
}
cout << "size is " << size << endl;
cout << "And the results are:" << endl;
for (int i = 0; i < size; ++i) {
cout << "inputnum[" << i << "] == " << inputnum[i] << endl;
}
return 0;
}
此程序将收集inputnum[]
数组中的输入,直到它达到EOF或无效输入。
答案 1 :(得分:-2)
什么是inputnum
?确保t是char[]
!!使用clang ++,这可以完美地编译和工作:
#include <iostream>
int main() {
int size = 0;
char inputnum[60];
for(int i=0;i<50;i++,size++) {
std::cin >> inputnum[i];
std::cout << size;
if(inputnum[i] == '.') {
break;
}
}
return 0;
}
(在我的情况下输出如下:)
a
0a
1s
2d
3f
4g
5.
6Argento:Desktop marinos$
只要您在循环中对char
测试char
而不是其他内容,您的代码就可以正常接触。inputnum
可能是某个整数值吗?如果是这样,那么除非inputnum
匹配数字值'.'
被隐式地转换为..
修改强>
显然你确实试图将char
放入int[]
。请尝试以下方法:
#include <iostream>
int main() {
using namespace std;
int size = 0;
int inputnum[50];
char inputchar[50];
for(int i=0;i<50;i++,size++) {
cin >> inputchar[i];
inputnum[i] = static_cast<int>(inputchar[i]); // or inputnum[i] = (int)inputchar[i];
cout << size << endl; // add a new line in the end
if(inputchar[i] == '.') break;
}
return 0;
}
然后,这可能是一个实验室任务,在一个真正的程序中,我永远不会像这样编码。 Tat将取决于要求,但我宁愿使用STL容器和算法或字符串流。如果被迫以较低级别的C风格工作,我会试着弄清楚什么数字'。'转换为(简单地通过int a ='。'; cout&lt;&lt; a;`)并将该数字直接放在test子句中。但是这样的代码可能很简单,但在我看来也是 BAD ,它不安全,特定于实现,而不是真正的C ++。