gpt4 book ai didi

c++ - 尝试验证 C++ 中的输入

转载 作者:太空狗 更新时间:2023-10-29 22:54:27 25 4
gpt4 key购买 nike

这段 C++ 代码背后的想法是计算所有输入数字的总和。当用户输入 0 时,程序应该停止。这部分代码按我的预期工作,但我想包括一个变体,它可以识别输入了不同于 float 的字符,在计算中忽略它并允许用户继续输入 float 。目前,输入除 float 以外的任何其他内容都会停止程序。

我知道有一个“if (!(cin >> numb))”条件,我试过在代码的不同地方解析它,但我不知道如何强制程序忽略这些无效的输入。如果有任何帮助,我将不胜感激。

#include <iostream>
#include <stdlib.h>

using namespace std;

float numb; float sum=0;

int main()
{
cout << "This app calculates the sum of all entered numbers." << endl;
cout << "To stop the program, enter 0." << endl << endl;
cout << "Enter the first number: ";
cin >> numb;

while(true)
{
sum += numb;

if (numb!=0)
{
cout << "Sum equals: " << sum << endl << endl;
cout << "Enter another number: ";
cin >> numb;
}
else
{
cout << "Sum equals: " << sum << endl << endl;
cout << "Entered 0." << endl;
cout << "Press Enter to terminate the app." << endl;
exit(0);
}
}
return 0;
}

最佳答案

你有三个选择:

  • 试错:尝试读取一个 float ,如果出现错误,清除错误标志,忽略错误输入并再次读取。问题是您实际上不知道有多少输入要被忽略。
  • 读取字符串:读取空格分隔的字符串,尝试使用stringstream转换字符串,并在出错时忽略整个字符串。问题在于,如果输入以有效的 float 开头但随后包含无效字符(例如 12X4),则无效部分将被忽略(例如 X4)
  • 控制解析:读取空格分隔的字符串,尝试使用std::stof()转换字符串, 并检查成功读取的字符串中的所有字符

这里是第二种方法,对循环进行了轻微的重组,因此 0 条目将导致退出循环而不是整个程序:

string input;  
while(cin >> input)
{
stringstream sst(input);
if (sst>>numb) {
sum += numb;
cout << "Sum equals: " << sum << endl << endl;
if (numb==0)
{
cout << "Entered 0." << endl;
break; // exits the while loop
}
cout << "Enter another number: ";
}
else
{
cout << "Ignored entry "<<input<<endl;
}
}
cout << "Press Enter to terminate the app." << endl;

Online demo

如果您更喜欢更准确的解析,请考虑以下内容:

size_t pos=0; 
float xx = stof(input, &pos );
if (pos!=input.size()) {
cout << "error: invalid trailing characters" <<endl;
}

关于c++ - 尝试验证 C++ 中的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55874760/

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