2014-11-01 69 views
-4

运行我的程序时不断收到此错误。如果我删除无效函数它工作正常,但是当我尝试运行完整的程序时,它给了我表达:(无符号)(c + 1)< = 256错误。尝试了一些在这个网站的线程来弄清楚发生了什么,但仍然无法弄清楚(Something,一些未签名的字符?)。我是初学者,所以任何帮助将不胜感激。这是我到目前为止:表达式:(无符号)(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 != '.'); 
} 
+0

什么是*确切*,*完整*错误信息?你的代码中没有叫'c'的变量。 – 2014-11-01 18:45:27

+0

弹出一个对话框,并说:调试断言失败!程序:... /作业6.exe文件:f:\ dd \ vctools \ crt_bld \ self_x86crt \ src \ isctpye.c行:56表达式:(unsigned)(c + 1)<= 256 – Kramer 2014-11-01 18:47:56

+0

另外,当我运行该程序与CTRL + F5没有编译器错误。 – Kramer 2014-11-01 18:59:49

回答

0

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

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

而且,你的输出文件看起来是空的..不知道如果这是你的意图。你的意思是做out_stream << next而不是cout << next? (和其他人,如-,#等)。

+0

我想要做的是首先计算原CAD.dat文件中的大写和小写字母的数量,然后采取该文件并将所有空格更改为' - '字符,将所有数字更改为'#'字符并交换所有小写字母和大写字母,并在转换后将其输出到屏幕。我可能是错的,但我假设我需要2个独立的功能来做到这一点。你对第二部分是正确的,但是我将它作为cout << next,以便我可以在屏幕上看到它。一旦一切正常,我会将其改为out_stream << next。 – Kramer 2014-11-01 18:58:27

+0

所以在更仔细地阅读你的评论之后,问题是我没有在te secon void function之前初始化文件的开头。我在第二个void函数之前重新打开了该文件,现在它工作。感谢您的帮助! – Kramer 2014-11-01 19:27:00

+0

@Kramer没有重新打开它,你应该可以像我的回答一样使用'fin.seekg(0)'。无论哪种方式,我很高兴你的工作。 – 2014-11-02 22:03:15

0

什么是在您的文本数据?例如,如果遇到德语变音符号或遇到另一个字符> 0x80,则会将其解释为负数,从而导致您的错误。

+0

只有文件中的内容为:Keith Kramer,CSCI 123,10/31/2014。 – Kramer 2014-11-01 18:52:13

0

代码看起来没问题,你提到的问题没有看到,因为没有变量叫做c,所以你怎么能得到你提到的错误? 然而,转换函数中,在进入do-while循环,初始化旁边不是“”其他一些值,例如,

char next = 0; 
相关问题