gpt4 book ai didi

c++ - cout 不在 for 循环外执行

转载 作者:行者123 更新时间:2023-11-28 06:15:37 25 4
gpt4 key购买 nike

我正在编写一个程序,输出用户输入的空格分隔整数(不超过 100)的总和。我应该将值读入数组,以便输入“1 2 3”产生“6”。

这是我目前所拥有的:

#include <iostream>
using namespace std;

int main() {
int i= 0;
int total = 0;
int input[100];

cout << "Please enter a series of integers, space separated, that you would
enter code here`like to calculate the sum of: " << endl;

for(; i < 100; i++)
{
cin >> input[i];
total += input[i];
}
cout << "The sum of these values is: " << total << endl;

getchar();
return 0;
}

按原样编码,它不会打印总数。如果我在 for 循环的末尾 cout,然后编译并输入 1 2 3,它会打印 1 3 6。这正是我所期望的。

此外,当我将数组大小设置为 5 并运行它(按原样编码)时,我发现如果我在每个值后按回车键,它会打印五个数字的总和。

但我需要它来读取空格分隔的值,而不是换行符分隔的值。我如何在不使用我还没有学过的 Material ( vector 、指针...)的情况下修改它?

如有任何提示、提示或批评,我们将不胜感激!

最佳答案

有一个 std::noskipws 允许显式获取空白分隔符。为了检查分隔符(可能会传递多个分隔符),我编写了以下函数:

bool wait_for_number(istream& is) {
char ws;

do {
ws = is.get();

if(!is.good())
throw std::logic_error("Failed to read from stream!");

if(ws == '\n')
return false;
} while(isspace(ws));

if(isdigit(ws))
is.putback(ws);
else if(ws != '\n')
throw std::logic_error(string("Invalid separator was used: '") + ws + "'");

return true;
}

循环中需要额外的条件:

bool hasnumbers = true;
for(; hasnumbers && i < 100; i++) {
int number;

cin >> noskipws >> input[i];
total += input[i];

hasnumbers = wait_for_number(cin);
}

注意 noskipws用于 cin 的表达式中.

一些测试用例:

  • 这些案例运行良好:

    echo '2' | ./skipws > /dev/null
    echo '1 2' | ./skipws > /dev/null
    echo '1 2 ' | ./skipws > /dev/null
    echo '1 2 3' | ./skipws > /dev/null
    echo '1 3' | ./skipws > /dev/null
  • 这种情况会导致“无法从流中读取!”:

    echo '' | ./skipws > /dev/null
    echo ' ' | ./skipws > /dev/null
    echo ' 1 2' | ./skipws > /dev/null
  • 这种情况导致“使用了无效的分隔符”错误:

    echo '1XXX3' | ./skipws > /dev/null

顺便说一句,你可以使用vector<int>它很容易重新分配,因此您的程序不会被限制为 100 个号码。

关于c++ - cout 不在 for 循环外执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30389748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com