请查看以下代码
#include <iostream>
#include <iomanip>
using namespace std;
double hypontenuse(double,double);
int main()
{
double side1 = 0;
double side2 = 0;
cout << "Enter side1 (-1 to exit)" << endl;
cin >> side1;
while(true)
{
if(side1==-1)
{
break;
}
cout << "Enter side2" << endl;
cin >> side2;
double result = hypontenuse(side1,side2);
cout << "The Hypontenuse of the Right Triangle is: " << setprecision(2) << fixed << result << endl;
cout << "Enter side1 (-1 to exit)" << endl;
cin >> side1;
}
}
double hypontenuse(double side1, double side2)
{
double result = (side1*side1)+(side2*side2);
return result;
}
我是C ++的新手。在这段代码中,如果我提供的输入无效(空格,制表符,字母等),则此代码突然变为无限循环。我需要忽略这些无效输入,显示消息,然后返回起始位置。我怎样才能做到这一点?请帮忙!
答案 0 :(得分:1)
您始终需要检查输入是否成功。通常,只需将流转换为布尔值即可完成此操作:
if (std::cin >> value) {
process(value);
else {
// recover from the error
}
从错误的输入中恢复至少包含两部分:
std::cin.clear()
。忽略字符的代码看起来就像其中之一:
std::cin.ignore(); // ignores one character
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignore until end of line
答案 1 :(得分:0)
就个人而言,我的建议是使用好的旧C“fgets()”和“sscanf()”。
但是,请看这个链接:
它执行以下操作:
1)使用std::getline(std::cin, str)
来读取您的原始输入(类似于“fgets”)
2)使用std::ws
来吃掉空白的空格(如标签,字符和换行符)
不幸的是,它没有帮助验证输入(sscanf()会在一个语句中为你做什么。)
'希望有所帮助
=============================================== ===============
问:你可以编辑我的代码吗?有点难以理解:( - Sepala
A:足够公平。这是:
#include <stdio.h>
double
hypontenuse(double side1, double side2)
{
return (side1*side1)+(side2*side2);
}
int
main(int argc, char *argv[])
{
double side1 = 0;
double side2 = 0;
char buff[80];
while(true)
{
printf ("Enter side1 and side2 (-1 to exit): ");
fgets (buff, sizeof (buff), stdin);
int iret = sscanf (buff, "%lf %lf", &side1, &side2);
if (side1 == -1)
break;
if (iret != 2)
continue;
double result = hypontenuse(side1,side2);
printf ("The Hypontenuse of the Right Triangle is: %.02lf\n", result);
}
printf ("Done.\n");
return 0;
}