相关疑难解决方法(0)

如何测试stringstream operator >>是否解析了错误类型并跳过它

我有兴趣讨论用于stringstream解析具有多种类型的行的方法.我将从查看以下行开始:

"2.832 1.3067 nana 1.678"
Run Code Online (Sandbox Code Playgroud)

现在让我们假设我有一个有多个strings和的长行doubles.解决这个问题的显而易见的方法是将字符串标记化,然后检查转换每个字符串.我有兴趣跳过第二步,stringstream直接使用只找到数字.

我认为解决这个问题的好方法是读取字符串并检查是否failbit已设置,如果我尝试将字符串解析为double,它将会是这样.

说我有以下代码:

string a("2.832 1.3067 nana 1.678");

 stringstream parser;
 parser.str(a);

 for (int i = 0; i < 4; ++i)
 {
     double b;
     parser >> b;
     if (parser.fail())
     {
         std::cout << "Failed!" << std::endl;
         parser.clear();
     }
     std::cout << b << std::endl;
 }
Run Code Online (Sandbox Code Playgroud)

它将打印出以下内容:

2.832
1.3067
Failed!
0
Failed!
0
Run Code Online (Sandbox Code Playgroud)

我没有惊讶它没有解析一个字符串,但内部发生了什么,以至于它无法清除它failbit并解析下一个数字?

c++ stringstream

30
推荐指数
2
解决办法
2万
查看次数

while循环在C++中不循环

所以我昨天刚开始 C++,我有相当多的 java 经验,所以这就是原因,我尝试运行这段代码,由于某种原因 while 循环没有循环,我尝试将 if break 语句从 更改ask==falseask=false,这最终会导致无限循环,甚至不接受用户输入。

这是代码:

#include <iostream>
#include <math.h>
using namespace std;

int main(){
    double raduis;
    const double pi = 3.14;
    bool ask;
    
    while(true){
        cout << "Enter the raduis of the circle:"<< endl;
        cin >> raduis;
        double circ = 2*pi*raduis;
        double area = pi*pow(raduis,2);
        cout << "The Circumference of the circle is: "<< circ <<endl;
        cout << "The Area of the circle is: "<< area<<endl;
        cout <<"Would you like to …
Run Code Online (Sandbox Code Playgroud)

c++ loops if-statement while-loop

2
推荐指数
1
解决办法
211
查看次数

标签 统计

c++ ×2

if-statement ×1

loops ×1

stringstream ×1

while-loop ×1