表达式:(无符号)(c + 1)< = 256?

时间:2014-11-01 18:43:43

标签: c++

运行程序时不断出现此错误。如果我删除任一void函数它工作正常,但当我尝试运行完整的程序时,它给我表达式:(无符号)(c + 1)< = 256错误。在这个网站上尝试了几个线程来弄清楚发生了什么,但仍然无法弄清楚(某事,某些无符号字符?)。我是初学者,所以任何帮助都会非常感激。以下是我到目前为止的情况:

#include <fstream>
#include <iostream>
#include <cstdlib>
using namespace std;

void countUpperLower(ifstream& instream, ofstream& outstream);
void Convert(ifstream& in_stream, ofstream& out_stream);


int main()
{
    ifstream fin;
    ofstream fout;

    fin.open("CAD.dat");
    if (fin.fail())
    {
        cout << "Input file opening failed.\n";
        exit(1);
    }


    fout.open("outputs.txt");
    if (fout.fail())
    {
        cout << "Output file opening failed.\n";
        exit(1);
    }

    countUpperLower(fin, fout);
    Convert(fin, fout);
    fin.close();
    fout.close();

    cout << endl << "End of editing files.\n";
    return 0;
}

void countUpperLower(ifstream& instream, ofstream& outstream)
{
    char caps;
    int uppercase = 0;
    int lowercase = 0;
    do
    {
        instream.get(caps);
        if (isupper(caps))
            uppercase++;
        else if (islower(caps))
            lowercase++;

    } while (caps != '.');

    cout << "There are " << uppercase << " uppercase letters in this file\n";
    cout << "There are " << lowercase << " lowercase letters in this file\n";

}

void Convert(ifstream& in_stream, ofstream& out_stream)
{
    char next;
    do
    {
        in_stream.get(next);
        if (isspace(next))
            cout << '-';
        else if (isdigit(next))
            cout << '#';
        else if (isupper(next))
            putchar (tolower(next));
        else if (islower(next))
            putchar (toupper(next));
        else
        cout << next;
    } while (next != '.');
}

3 个答案:

答案 0 :(得分:0)

您的文字数据中包含哪些内容?例如,当遇到德国变音符号或其他字符> 0x80时,它被解释为负数,这将说明您的错误。

答案 1 :(得分:0)

代码看起来没问题,你提到的问题,看不到任何问题,因为没有名为c的变量,所以你怎么能得到你提到的错误? 但是,在转换函数中,在输入do-while循环之前,请在&#39;以外的某个值旁边初始化。&#39;,例如,

char next = 0;

答案 2 :(得分:0)

您想要在整个文件上运行两个不同的进程吗?如果是这样,您就不会在函数之间寻找文件的开头。你需要做这样的事情:

countUpperLower(fin, fout);
fin.seekg(0);
Convert(fin, fout);

此外,您的输出文件似乎是空的..不确定这是否是您的意图。您的意思是out_stream << next而不是cout << next吗? (以及其他人,例如-#等)。