我怎么才能在弦上做好好工作呢?
[this不是一个链接]
while (1)
{
cin.clear();
cin.sync();
cout << "\n" << "Enter the state you are from" << endl;
cin >> s;
if (!cin.good())
{
cout << "\n" << "Please the enter the correct form of your state :)" << endl;
}
else
{
break;
}
}
即使我输入一个数字而不是字符串,它仍然不起作用。
3条答案
按热度按时间6jjcrrmo1#
问题出现在
if
条件下。good()如果在阅读文件时出现问题,或者文件不存在,则返回0
正如你在帖子的评论中所说,输入1234作为整数仍然会被视为“1234”。我认为最好的方法是遍历每个字符,检查它们是否是数字,如果它到达最后,那么它是一个数字。
Here是指向上述代码工作示例的链接。
oogrdqng2#
即使我输入数字而不是字符串,它仍然不起作用
不存在“输入数字而不是字符串”这样的事情。用户对数据类型没有任何控制权,代码读取的是字符串。
如果用户输入一个表示数字的字符串,则该字符串仍然是一个有效的字符串,并且
cin
仍然处于良好状态。例如,可以在字符串上使用
strtoi
来查看它是否是一个数字。但这仍然是非常薄弱的验证逻辑。“C*7”不是一个数字,但你可能也不想接受它作为一个州/省的名字。应用一些规则来定义有效名称,数字输入将与所有其他垃圾沿着被阻止。wnvonmuf3#
cin
的任务是获取数据。如果不能,它将设置.good()
,.fail()
,.eof
等标志。你可以在需要的时候检查。在这种情况下,它得到了一个字符串。不管你喜不喜欢这根弦。由程序员使用其他代码来验证字符串是否有用,例如通过检查字符串是否匹配有效状态。成功提供数据后,
cin
无法决定有关数据的任何事情。这就像指责电话的来电者是谁。如果所有状态都放在关联容器中:
set
/unordered_set
/map
/unordered_map
,则代码可能如下所示:它是用于检查状态是否有效的容器。