gpt4 book ai didi

c++ - 随机打印出 int 的大小,不知道为什么

转载 作者:行者123 更新时间:2023-11-30 03:31:48 25 4
gpt4 key购买 nike

出于某种原因,此代码在获得多个输入后打印出 int 的大小。我是 c++ 的初学者,如果有人能帮助我并帮助我理解为什么会这样,我将不胜感激。谢谢。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

int calculateVowelIndex(std::string input)
{
float numVowel = 0, numCon = 0;
int vowelIndex;

std::vector<char> vowels{ 'a', 'e', 'i', 'o', 'u', 'y' };

std::transform(input.begin(), input.end(), input.begin(), ::tolower);

for (int x = 0; x < input.length(); ++x)
{
if (std::find(vowels.begin(), vowels.end(), input[x]) != vowels.end())
++numVowel;

else
++numCon;
}

vowelIndex = numVowel / (numVowel + numCon) * 100;

return vowelIndex;
}

int main()
{
int n;
std::string input;
std::vector<std::string> words;
std::vector <unsigned int> vowelIndexes;
std::cin >> n;

for (int x = 0; x < n; ++x)
{
std::getline(std::cin, input);
words.push_back(input);
vowelIndexes.push_back(calculateVowelIndex(input));
}

for (int x = 0; x < words.size(); ++x)
{
std::cout << vowelIndexes.at(x) << " " << words.at(x) << std::endl;
}

std::cin.get();
}

最佳答案

我最好的猜测是发生这种情况是因为当您输入输入时,最终会有一个额外的换行符,然后被 std::getline 的第一次迭代吞噬了。 .输入字数后,std::cin的缓冲区可能如下所示:

"3\n"

std::cin >> n;解析整数并在到达换行符时停止,将其留在 std::cin 中:

"\n"

第一个电话然后是std::getline读入所有字符(这里没有字符)直到到达换行符('\n'),然后读取并丢弃,std::cin 中什么也没有留下。 .因此在第一次迭代时读入一个空行并将其传递给函数。

这还剩下两次循环迭代。接下来两次调用 std::getline没有可从 std::cin 读取的输入,因此它会提示您提供更多信息,并且循环会相应地对其进行处理。

if I input 3, and then 2 words, after the second word it prints out the size of an int (2,147,483,647) and doesn't let me input the 3rd word.

这就是发生这种情况的原因:一个被遗忘的换行符被读入并作为一个空行的结尾。

为了解决这个问题,我们必须读取该行中所有剩余的字符并在读取更多行之前丢弃它们。这可以通过 ignore 来完成std::cin 上的方法,像这样:

// ...
std::cin >> n;

// skip the rest of the line
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

for (int x = 0; x < n; ++x)
// ...

std::numeric_limits<limits> .这将读取并丢弃每个字符,直到遇到换行符,然后读取并丢弃该字符。

或者,因为看起来你只是想要一个词,为什么不使用读取一个词的方法呢?

std::cin >> input;

关于c++ - 随机打印出 int 的大小,不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43913767/

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