我无法弄清楚为什么" cout"没有正常工作

时间:2015-06-01 13:26:08

标签: c++ file-io

我写了一个实现文件I / O的代码。此代码包含两个函数 - 一个用于将字符写入文本文件,另一个用于从文本文件中读取字符。

#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include <iostream>
#include <fstream>

using namespace std;

int writefile(const char* f)
{
    int cnt = 0;
    char c;
    ofstream ofile;
    ofile.open(f);

    while (true)
   {
        cout << "input character:";
        cin >> c;
        if (cin.eof())
            break;
        ofile << c;
        cnt++;
    }
    ofile.close();
    return cnt;
}

int readfile(int n, const char* f)
{
    int cnt = 0;
    ifstream ifile;
    ifile.open(f);

    do
    {
        cout << static_cast<char>(ifile.get());
        cnt++;

    } while (cnt<n);

    cout << endl;

    ifile.close();
    return cnt;
}

int main(void)
{

    char ch;
    int num,total,sum;
    const char* filename = "test.txt";


    total = writefile(filename);

    cout << total<<" characters were written successfully." << endl;

    cout << "how many characters?";
    cin >> num;

    sum = readfile(num,filename);

    cout << sum << " characters were read successfully." << endl;

    system("pause");
    return 0;
} 

问题是这样的:     cout&lt;&lt; &#34;多少个字符?&#34 ;;     cin&gt;&gt; NUM;

这部分不起作用。我想最初显示用户输入的字符数,但我无法输入字符数。 我希望你们能选择问题所在。

3 个答案:

答案 0 :(得分:0)

问题是在writefile()中你读到了流,直到你到达文件末尾。完成后,cin中的文件结束标志将被设置,cin将从输入中读取更长时间。您需要致电clear()删除该标志并继续阅读。

答案 1 :(得分:0)

cout << "how many characters?";之后立即提供以下内容:

std::cin.clear();
std::cin.ignore(std::numeric_limits<streamsize>::max(), '\n'); // must #include <limits>    
std::cin.unget(); // THIS IS IMPORTANT

第一行清除流的错误标志,设置为ios::eofbit,因为您读到EOF。第二行忽略流中的所有内容,包括分隔符(在本例中为换行符'\n')或EOF(但EOF is not discarded),以先到者为准。 最后一行非常重要,否则您的流中仍会包含EOF,因此您需要将其丢弃。

答案 2 :(得分:0)

writefile中,您循环到cin.eofeof表示“文件结束”:显式地,此处没有更多输入。就其本身而言,这是一个永久性的条件,就像玻璃杯是空的:“我想再多喝一口,但没有任何事情发生!”

你可以致电cin.clear(),但这有点奇怪:就像填满用过的锡罐一样。更好的方法可能是测试空白行,例如通过测试

if (c == '\n')

现在用户可以输入字符直到完成,然后他们只需按Enter键。

您应该将eof视为错误。