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) {
  ...
}