gpt4 book ai didi

C++ stringstream 输入的各种结果

转载 作者:行者123 更新时间:2023-11-30 03:52:02 39 4
gpt4 key购买 nike

我正在尝试一个“stringstream”程序,它是这样的:

#include <iostream>
#include <sstream>
using namespace std;
int main()
{
int x;
char ch;
std::string myString;
cout<< "input an integer:-" << endl;
while (getline ( cin, myString ))
{
std::istringstream strin(myString);
strin >> x;
if (!strin)
{
cout << "Bad 1 input \'" << strin.str() << "\'" << endl;
}
else if ( strin >> ch )
{
cout << "Bad 2 input \'" << ch << "\'" << endl;
}
else
{
cout << "You entered: " << x << endl;
break;
}
}
cout<< "good";
return 0;
}

输出:

input an integer:-
he is there
Bad 1 input 'he is there'
5.0
Bad 2 input '.' // problem 1
2 3
Bad 2 input '3' // problem 2
2 string
Bad 2 input 's' // problem 3
c string
Bad 1 input 'c string'
string 2
Bad 1 input 'string 2' // problem 4
5
You entered: 5
good

因为我在这里标记了我的问题,所以他们去了:

问题 1:为什么不在此处抛出错误输入 1?还有为什么 ch 等于 '.'如果抛出错误输入 2,则不为 0?

问题 2:为什么不抛出错误输入 1?为什么 ch 等于 3?

问题 3:为什么不(再次)抛出错误输入 1? (这也问为什么输出给出's'而不是'2 string')

问题 4:为什么输出与问题 3 不相似?

我无法弄清楚为什么会这样。

最佳答案

Stringstream 按字符解析输入。如果它开始解析一个 int,这就是问题 #1-3 中发生的情况,它不会抛出 badinput 1。

它使用的过程是这样的。

  1. 第一个字符是数字(或符号)吗?
    • 如果是,则存储并继续,否则,错误一;
  2. 下一个字符是数字吗?
    • 如果是,存储并继续,再次运行第二步。
    • 如果不是,它是终端字符即 '\0' 还是空格
      • 如果是,那很好。但如果是空格,如果除了 '\0' 或更多空格之外还有任何其他字符,则错误二。
      • 否则,错误二。

因此,在问题#中:

  1. 由于第一个字符是数字 (5),因此避免了错误 1。但是由于第二个是'.',所以在输入结束前遇到了一个坏字符。
  2. 第一个字符是数字 (2),因此避免了错误 1。但是下一个字符是一个空格,后面跟着'3',不能组成int,导致错误2。
  3. 第一个字符是'2',一个数字。这里没有错误。然后你有一个空格,然后是 's'。这里没有整数。错误 2。
  4. 这里,第一个字符是's',显然不是数字。错误 1。

关于C++ stringstream 输入的各种结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30924894/

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