0

对于作业,我的程序的一部分要求我可以从文件中接收 2 个数字或手动输入它们。我可以通过以下方式轻松地从文件中获取它们:

int n1,n2;
cin>>n1>>n2;

这样,一个内容简单地读取类似“7 13”的文件将可以很好地读取数字。但是,我的老师希望我们有一种格式,在输入每个数字之前都有提示,处理方式如下:

int n1,n2;
cout<<"Number 1: ";
cin>>n1;
cout<<"Number 2: ";
cin>>n2;

但是,使用此代码消除了从文件中简单地读取 2 个数字的能力。我怎样才能使这两种方法都起作用?我不能将它们组合成一个程序,因为那样我就会有 2 个相同的提示。这甚至可能吗?

在旁注中,我通过在命令行上键入来读取数字: prog.exe < numberfile >

4

5 回答 5

1
cin>>n1>>n2;

...

cin>>n1;
cin>>n2;

他们是一样的。打印出的东西cout不影响cin

运算符>>reutrn 对 a ostream(cin在这种情况下) 的引用,您可以>>在链中使用。

于 2013-10-03T07:14:09.027 回答
1

如果您真的想对两个流使用相同的代码,我建议:

int n1, n2;
istream* in = NULL;
if (argc > 1) {
    in = new ifstream();
    in->open(argv[1]);
}
else {
    in = &cin;
}

(*in) >> n1 >> n2;

if (argc > 1) {
    delete in;
}

干杯,

于 2013-10-03T17:32:48.497 回答
0

可以做这样的事情:

int n1,n2,method;

cout << "Enter 1 for file method or 2 for prompts: ";
cin >> method;

if(method == 1)
{
    cin >> n1 >> n2;
}
else if(method == 2)
{
    cout << "Number 1: ";
    cin >> n1;
    cout << "Number 2: ";
    cin >> n2;
}
于 2013-10-03T07:18:50.933 回答
0

我不认为 cout 应该影响 cin,尝试在每行末尾添加 endl 也许这将是一个简单的修复。

于 2013-10-03T07:26:42.530 回答
0

你可以像这样组合它们:

int n1, n2;
if (argc > 1)
{
    std::ifstream input(argv[1]);
    if (input)
    {
        input >> n1 >> n2;
    }
    else
    {
        // Handle error
    }
}
else
{
    // Prompt and read from stdin
}
于 2013-10-03T07:57:01.080 回答