2014-11-01 2 views
-4

Продолжайте получать эту ошибку при запуске моей программы. Если я удаляю любую функцию void, она работает нормально, но когда я пытаюсь запустить полную программу, она дает мне выражение: (unsigned) (c + 1) < = 256. Попробовал пару потоков на этом сайте, чтобы выяснить, что происходит, и все еще не могу понять (что-то, что-то неподписанное?). Я новичок, поэтому любая помощь была бы очень оценена. Вот что у меня есть до сих пор:Выражение: (без знака) (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'. –

+0

Диалоговое окно появляется и говорит: «Отладка подтверждения не удалась! Программа: .../Домашнее задание 6.exe Файл: f: \ dd \ vctools \ crt_bld \ self_x86crt \ src \ isctpye.c Строка: 56 Выражение: (без знака) (c + 1) <= 256 – Kramer

+0

Также, когда я запускаю в программе с CTRL + F5 ошибки компилятора нет. – Kramer

ответ

0

Вы желая запустить два различных процесса на весь файл? Если это так, вы не пытаетесь найти начало файла между вашими функциями. Вам нужно сделать что-то вроде этого:

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

Кроме того, ваш выходной файл выглядит пустым .. Не уверен, если это ваше намерение. Вы писали: out_stream << next вместо cout << next? (И другие, такие как -, # и т. Д.).

+0

То, что я пытаюсь сделать, это сначала подсчитать количество букв верхнего и нижнего регистра в исходном файле CAD.dat, а затем взять этот файл и изменить все пробелы на символы «-», все цифры на «#» символы и поменять все строчные и прописные буквы и вывести их на экран после преобразования. Возможно, я ошибаюсь, но я предполагаю, что для этого мне понадобятся две отдельные функции. Вы правы во второй части, но я оставляю ее как cout << next, чтобы я мог видеть ее на экране. После того, как все будет работать, я изменю это на следующий. – Kramer

+0

Итак, прочитав ваш комментарий более странно, проблема заключалась в том, что я не инициализировал начало файла до функции te secon void. Я снова открыл файл перед второй функцией void, и теперь он работает. Спасибо за помощь! – Kramer

+0

@Kramer Вместо того, чтобы открывать его, вы должны просто использовать 'fin.seekg (0)' как в моем ответе. В любом случае, я рад, что вы его работали. –

0

Что имеется в ваших текстовых данных? Когда встречается немецкий Umlaut, например, или другой символ> 0x80, он интерпретируется как отрицательное число, которое учитывало бы вашу ошибку.

+0

Только текст в файле: Keith Kramer, CSCI 123, 31.10.2014. – Kramer

0

Код выглядит нормально, и проблема, с которой вы ссылаетесь, не видна, поскольку нет переменной с именем c, так как вы могли бы получить указанную вами ошибку? Однако, в функции Convert, перед входом делать-то время цикла, инициализировать рядом с какой-то значение, отличное от «», например,

char next = 0; 
Смежные вопросы