验证whitepsace分离的整数c ++

时间:2016-08-25 01:15:00

标签: c++ validation input integer cin

关于输入格式的验证,我已经看到了关于SO的其他问题,但我正在为我所遇到的问题寻找更具体的答案。

目前,我需要读入2个整数值并将它们存储为坐标。我用过:

public String doDropboxWork(String path, String cursor) { // make request for path if (cursor == null) { ListFolderBuilder listFolderBuilder = client.files().listFolderBuilder(path); result = listFolderBuilder.withRecursive(true).withIncludeDeleted(false).start(); } else { result = client.files().listFolderContinue(cursor); } while (true) { // ... do work .... if (!result.getHasMore()) { break; } result = client.files().listFolderContinue(result.getCursor()); } // get new cursor String cursor2 = client.files().listFolderGetLatestCursor(path).getCursor(); return cursor2; }

将读取x&的值y以空格分隔。

但是,

以外的任何输入
  

int whitepsace int

会破坏我的程序。我试图验证输入以确保每个值都是一个整数,但它只适用于第一个整数输入。

我还需要确保输入的格式保持为 int whitespace int ,以便我可以在整个程序中始终使用这些值。

有什么想法吗?

我尝试过没有运气的事情:

  • 使用带有cin >> x >> ycin.fail()检查的do-while循环进行阅读。
  • 使用max()
  • 进行验证

1 个答案:

答案 0 :(得分:3)

首先将两个值读入两个std::string。这将读入任何以空格分隔的文本,而不会将std::cin置于失败状态。

读完这两个单词后,为每个单词构建一个std::istringstream,使用operator>>尝试将其解析为int。使用fail()检查转换是否失败,以及整个std::istringstream是否已被使用。

如果std::istringstream未处于失败状态,而get()返回eof,则整个字词已成功解析为int

问题解决了。

当然,这不是唯一的方法,但可能是最简单的方法,而且这种方法仅限于使用基本的C ++库类,没有什么太花哨的。