关于c ++操作数的错误
我没有关于此的数据
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main()
{
double hr, mins, secs;
cin >> "time remaining: %02d::%02d::%02" >> hr >> mins >> secs; //first ">>" is error point.
cout << "time remaining: %02d::%02d::%02" << hr << mins << secs << endl;
system("pause");
return 0;
}
在此代码中,有关操作数的编译错误 cin >>“剩余时间:%02d ::%02d ::%02” >>小时>>分钟>>秒; 我期望有完美的代码..但是此代码具有关于操作数的编译错误
答案 0 :(得分:1)
cin >> "time remaining: %02d::%02d::%02" >> hr >> mins >> secs;
从技术上讲是纯净的:没有operator>>
重载接受char const*
。从更高的角度来看,这无论如何都是没有意义的:operator>>
旨在修改传递给的参数,但是char const*
数据是不可变的(如果是字符串文字或指向const数组的指针则是真正不可变的,或者仅是虚拟的,但仍然)。
您最有可能打算这样做:
cin << "time remaining: %02d::%02d::%02"; // out put task to user
// (maybe prepend "please enter ")
cin >> hr >> mins >> secs;
cout << "time remaining: %02d::%02d::%02" << hr << mins << secs << endl;
// ^ add some whitespace?
还有其他一些问题:
#include <stdlib.h>
#include <string.h>
通常可以正常工作的C ++标头为:
#include <cstdlib>
#include <cstring>
using namespace std
被认为是不良做法。尽管它在源文件(.cpp)中不会受到太大影响,但 永远不要 在头文件(.h)中进行处理:这可能导致名称冲突,并且使用( forced 在这种情况下要使用的用户)您的标头将无法删除。
用户输入后,您无需检查std::cin
的流状态。但是,用户可能输入了无效数据,例如10y 12z 7%
–流在首次发现无效输入并在此后停止读取时将设置fail
标志。在C ++ 11之前,它保持输入变量不变,之后,将它们设置为0。无论如何,您将对无效输入进行操作。您可以在所有输入之后检查一次并有可能退出(如果错误发生在什么地方无关紧要),或者您可以在每次输入之后进行检查(更多的工作,但是可以进行更细粒度的错误处理)。>
您似乎习惯了printf
函数家族。请注意,C ++输入/输出流不了解格式字符串。所以
cout << "time remaining: %02d::%02d::%02" << hr << mins << secs << endl;
假设输入为10、12、7,将为您提供准确的信息:
time remaining: %02d::%02d::%0210127
不幸的是,使用流的C ++输出格式化迅速变得难看。您可以通过
获得(可能)所需的输出std::cout << "time remaining: " << std::setfill('0') << std::setw(2) << hr
<< "::" << std::setw(2) << mins << "::" << std::setw(2) << secs << std::endl;
类似地,输入字符串;您可以输出单个字符串期望的内容,只是删除格式,然后读入三个整数(必须输入不带冒号的空格,它们之间用空格分隔–如果您要冒号,则需要分别读取它们! )。更加用户友好的方式是,为用户输入分别为每个值接下来要输入的内容–与other answer中显示的内容类似。
最后:system("pause");
也许很方便,但是保持外壳窗口打开不是可执行文件的任务。它仅防止您的应用程序在Shell脚本中可用。如果您只是在玩耍,虽然也许可以接受(但是您可能会习惯),但是不要在生产性代码中使用它。
答案 1 :(得分:0)
int hr, mins, secs;
cout << "Input the hours: " << flush;
cin >> hr;
cout << "Input the minutes: " << flush;
cin >> mins;
cout << "Input the seconds: " << flush;
cin >> secs;
cin.get();
system("cls");
cout << "time remaining: " << hr << "::" << mins << "::" << secs << endl;
cin.get();