Вот мой код:C++ Вывод: станд :: соиЬ и выходной файл не имеют одинаковое содержание
//main.cpp
#include <iostream>
#include <fstream> //files
#include <string> //strings
#include <sstream> //stringstreams
string intToString(int wert){
ostringstream strout;
string str;
strout<<wert;
str=strout.str();
return str;}
int stringToInt(string str){
istringstream strin;
unsigned long long intVar;
strin.str(str);
strin>>intVar;
return intVar;}
string wordsToAscii(string wort){
string hold;
for(int j=0;j<wort.length();j+=3){
for(int i=j;i<j+3;i++){
if(int(wort[i]>=100))
hold=hold+intToString(int(wort[i]));
if(int(wort[i]>=10 && wort[i]<=99))
hold=hold+"0"+intToString(int(wort[i]));
if(int(wort[i]<=9))
hold=hold+"00"+intToString(int(wort[i]));
}
}
return hold;
}
string AsciiToWords(string wort){
string hold;
string total;
for(int j=0;j<wort.length();j+=15)
for(int i=j;i<j+15;i+=3){
hold="\0";
for(int k=i;k<i+3;k++)
hold+=wort[k];
if(hold=="000")
break;
total+=stringToInt(hold);
}
return total;
}
int main(){
string str;
ifstream f ("input");
ofstream g ("temp");
while(!f.eof())
if(getline(f,str)){
cout<<wordsToAscii(str)<<"\n";
g<<wordsToAscii(str)<<"\n";}
f.close();
g.close();
ifstream h ("temp");
ofstream i ("output");
while(!h.eof())
if(getline(h,str)){
cout<<AsciiToWords(str)<<"\n";
i<<AsciiToWords(str)<<"\n";}
h.close();
i.close();
return 0;
}
вход: (файл)
first line test1
second line test2
last line test3
testA testB testC
one
two
температура: (файл)
8105110101032116101115116049000000
8105110101032116101115116050000
8105110101032116101115116051
116101115116065032116101115116066032116101115116067000
111110101
116119111
выпуск: (файл)
first line test1
second line test2
last line test3
testA testB testC
one
выход: (в терминале)
8105110101032116101115116049000000
8105110101032116101115116050000
8105110101032116101115116051
116101115116065032116101115116066032116101115116067000
111110101
116119111
first line test1
second line test2
last line test3
testA testB testC
oneA
twoA
Первая функция преобразует caracters в их соответствующие номера ASCII. Второй должен преобразовать его обратно.
Эти две функции работают хорошо. Проблема заключается в разном выходе в файле и терминале. Единственная разница - cout<<
вместо i<<
Кроме того, с разным входным сигналом, иногда последняя строка записывается дважды или вообще не записывается. Я просто не могу объяснить это сам. Я исследовал часы, изменил способ чтения/записи файлов, переписал некоторые части кода и т.д., не найдя причину,
Заранее спасибо за помощь
[ 'в то время как (! EOF())' неправильно] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) , – melpomene
Остерегайтесь своего сусла [i]. В вашем коде «i» может быть больше длины сусла. – Ripi2
Что такое 'stringToInt' и' intToString'? – melpomene