C:帮助解决Linux和Windows之间的差异问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C:帮助解决Linux和Windows之间的差异问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1434字,纯文字阅读大概需要3分钟。
内容图文
![C:帮助解决Linux和Windows之间的差异问题](/upload/InfoBanner/zyjiaocheng/966/6d5d2fc585ff487cad2ac49c057f89d1.jpg)
我有一个我写的Win32控制台程序,它工作正常.该程序从用户获取输入并执行一些计算并显示输出 – 标准内容.为了好玩,我试图让程序在我的Fedora盒子上工作,但是当用户输入与我的变量类型不匹配的东西时,我遇到了清除cin的问题.这是有问题的代码:
void CParameter::setPrincipal() {
double principal = 0.0;
cout << endl << "Please enter the loan principal: ";
cin >> principal;
while(principal <= 0)
{
if (cin.fail())
{
cin.clear();
cin.ignore(INT_MAX, '\n');
}
else
{
cout << endl << "Plese enter a number greater than zero. Please try again." << endl;
cin >> principal;
}
}
m_Parameter = principal;
}
此代码适用于Windows.例如,如果用户尝试输入char数据类型(相对于double),则程序会通知用户错误,重置cin,并允许用户再次输入有效值.
当我将此代码移动到Fedora时,它编译得很好.当我运行程序并输入无效的数据类型时,while循环永远不会中断以允许用户更改输入.
我的问题是;如何在Fedora环境中输入无效数据时清除cin?此外,我应该如何编写此代码,以便它可以在两种环境中工作(Windows和Linux)?
在此先感谢您的帮助!
解决方法:
我认为使用格式化输入来读取用户响应是个坏主意.我使用getline – 这样的东西:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
template <typename T>
bool Read( T & t, istream & is ) {
string s;
if ( ! getline( is, s ) ) {
return false;
}
else {
istringstream ss( s );
return ss >> t;
}
}
int main() {
while(1) {
double d;
if ( ! Read( d, cin ) ) {
cout << "invalid\n";
}
else {
cout << "You entered " << d << "\n";
}
}
}
在Windows上运行 – 我目前没有打开我的Linux机箱.
内容总结
以上是互联网集市为您收集整理的C:帮助解决Linux和Windows之间的差异问题全部内容,希望文章能够帮你解决C:帮助解决Linux和Windows之间的差异问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。