繁体   English   中英

我不知道为什么“提示”无法正常工作

[英]I can't figure out why “cout” didn't work properly

我编写了用于实现文件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 <<“多少个字符?”; cin >> num;

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

问题是在writefile()您将读取流,直到到达文件末尾。 一旦你这样做文件标志到底cin将被设置和cin将不再从输入读取。 您需要调用clear()来删除该标志并继续阅读。

您需要的是cout << "how many characters?";之后的以下内容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

第一行清除流的错误标志,因为您一直读到EOF,所以将其设置为ios::eofbit 第二行忽略流中剩下的所有内容,包括定界符(在这种情况下为换行符'\\n' )或EOF(无论EOF是否被丢弃 ),以先到者为准。 最后一行很重要,因为否则您的流仍将包含EOF,因此您需要丢弃它。

writefile ,循环直到cin.eof eof表示“文件结束”:明确地,这里没有更多输入。 就其本身而言,这是一个永久性的条件,例如杯子是空的:“我想再喝一口,但什么也没发生!”

您可以调用cin.clear()但这cin.clear() :就像装满用过的锡罐一样。 更好的方法可能是测试空白行,例如通过测试

if (c == '\n')

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

您可能应该将eof视为错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM