cin 运行 在 while 循环中只有一次
cin running only once inside while loop
我看到另一个 post 几乎相同的标题,但它根本没有帮助,因为他们的代码有错误。我只想获得与客户输入的值一样多的值并添加它们,但它只需要第一个输入
#include <iostream>
#include <string>
using namespace std;
int issa_def() {
int issa[] = {};
int half_ans_issa[] = {};
int i = 0;
int cn = 0;
while(true) {
cout << "enter prices of items ordered by issa: ";
cin >> cn;
if(cn == 111) {
break;
}
else {
issa[i] = cn;
}
i++;
cin.clear();
}
int a = 0;
for(int i = 0;i <= sizeof(issa);i+=2) {
int ans = issa[i] + issa[i+1];
half_ans_issa[a] = ans;
a++;
cout << issa[i] << "\n" << issa[i+1] << "\n";
}
a = 0;
cout << half_ans_issa[a];
}
int main() {
issa_def();
}
这是打印我输入的第一个和第二个输入的值以及总和后的输出
C:\Users\akram\Documents\code>a.exe
enter prices of items ordered by issa: 5
enter prices of items ordered by issa: 5
enter prices of items ordered by issa: 111
first input:5
second input:0
output:5
注意:111 是退出代码
我打开了用户所说的编译器警告 –πìντα ῥεῖ 我得到了错误
dahra.cpp:23:18: warning: comparison between signed and unsigned integer express
ions [-Wsign-compare]
for(int i = 0;i <= sizeof(issa);i+=2)
您应该使用 cin.clear(); cin.ignore();
刷新 cin 缓冲区
cin.clear()
清除流的内部状态,这样可以避免错误。然后 cin.ignore()
忽略所有内容直到下一行(这就是你想要的)
首先,你必须定义一个常量大小的数组issa。您在这里定义了一个空数组。所以你不能用 issa[i] 访问元素并分配一个新值。为此,您可以使用向量数组。
vector<int> issa;
int temp;
cin>>temp;
issa.push_back(temp);
2nd 你必须写一个 return 语句。
警告:有符号和无符号之间的比较
在这里,您的代码的问题是您正在比较有符号整数和无符号整数。 sizeof(issa) returns 一个无符号整数。
你可以通过声明一个带符号的整数来解决这个问题,比如
int n = sizeof(issa);
for(int i = 0;i <n ;i+=2) {
你的数组大小是多少?您使用 {}
初始化它们,因此它们只是一个没有任何内存分配的 int*
。一旦您向 issa[i]
中插入值,您就会溢出。
出于类似的原因,您不能从 0 迭代到 sizeof(issa)
(包括后者)。首先,sizeof
给出以字节为单位的大小,而不是数组元素的数量。其次,如果 sizeof
像您预期的那样工作,您将遍历 (n+1) 个元素,而不是 (n)。最后,如果数组有奇数个元素,则访问数组外的内存 (issa[i+1]
)。您应该使用 std::vector
来获取任意数量的输入。
最后,您的 issa_def
函数应该有一个 return
。
总结一下,当你在数组中插入元素时,你应该使用
issa.push_back(cn)
并且,在遍历 issa
时,您应该考虑 even/odd 数组,以及数组的适当大小:
for(int i = 0; i < issa.size() - 1; i += 2) {
...
}
我看到另一个 post 几乎相同的标题,但它根本没有帮助,因为他们的代码有错误。我只想获得与客户输入的值一样多的值并添加它们,但它只需要第一个输入
#include <iostream>
#include <string>
using namespace std;
int issa_def() {
int issa[] = {};
int half_ans_issa[] = {};
int i = 0;
int cn = 0;
while(true) {
cout << "enter prices of items ordered by issa: ";
cin >> cn;
if(cn == 111) {
break;
}
else {
issa[i] = cn;
}
i++;
cin.clear();
}
int a = 0;
for(int i = 0;i <= sizeof(issa);i+=2) {
int ans = issa[i] + issa[i+1];
half_ans_issa[a] = ans;
a++;
cout << issa[i] << "\n" << issa[i+1] << "\n";
}
a = 0;
cout << half_ans_issa[a];
}
int main() {
issa_def();
}
这是打印我输入的第一个和第二个输入的值以及总和后的输出
C:\Users\akram\Documents\code>a.exe
enter prices of items ordered by issa: 5
enter prices of items ordered by issa: 5
enter prices of items ordered by issa: 111
first input:5
second input:0
output:5
注意:111 是退出代码
我打开了用户所说的编译器警告 –πìντα ῥεῖ 我得到了错误
dahra.cpp:23:18: warning: comparison between signed and unsigned integer express
ions [-Wsign-compare]
for(int i = 0;i <= sizeof(issa);i+=2)
您应该使用 cin.clear(); cin.ignore();
cin.clear()
清除流的内部状态,这样可以避免错误。然后 cin.ignore()
忽略所有内容直到下一行(这就是你想要的)
首先,你必须定义一个常量大小的数组issa。您在这里定义了一个空数组。所以你不能用 issa[i] 访问元素并分配一个新值。为此,您可以使用向量数组。
vector<int> issa;
int temp;
cin>>temp;
issa.push_back(temp);
2nd 你必须写一个 return 语句。
警告:有符号和无符号之间的比较
在这里,您的代码的问题是您正在比较有符号整数和无符号整数。 sizeof(issa) returns 一个无符号整数。
你可以通过声明一个带符号的整数来解决这个问题,比如
int n = sizeof(issa);
for(int i = 0;i <n ;i+=2) {
你的数组大小是多少?您使用 {}
初始化它们,因此它们只是一个没有任何内存分配的 int*
。一旦您向 issa[i]
中插入值,您就会溢出。
出于类似的原因,您不能从 0 迭代到 sizeof(issa)
(包括后者)。首先,sizeof
给出以字节为单位的大小,而不是数组元素的数量。其次,如果 sizeof
像您预期的那样工作,您将遍历 (n+1) 个元素,而不是 (n)。最后,如果数组有奇数个元素,则访问数组外的内存 (issa[i+1]
)。您应该使用 std::vector
来获取任意数量的输入。
最后,您的 issa_def
函数应该有一个 return
。
总结一下,当你在数组中插入元素时,你应该使用
issa.push_back(cn)
并且,在遍历 issa
时,您应该考虑 even/odd 数组,以及数组的适当大小:
for(int i = 0; i < issa.size() - 1; i += 2) {
...
}