2015-06-09 2 views
1

Кажется, что это должен быть базовый C++-процесс, но я не знаком с выходом данных.Запись данных CRC в файл .txt

Когда я печатаю данные без вывода в текстовый файл, я получаю правильные значения.

example: 00150017000 181 

При печати в текстовом файле, это то, что я получаю:

11161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116 

Вот мой код:

ofstream myfile; 
myfile.open("C:\\CRC.txt"); 
for (i = 0; i < 200; i++, id++) 
{ 
    myfile << sprintf(idstring, "%011d", id); 
    myfile << printf("%s %03d\n", idstring, computeCrc(idstring)); 
} 
myfile.close(); 

Все остальное работает отлично, и я знаю, что CRC генерируется правильно. Просто вопрос получения правильного вывода.

Я смог вывести экран консоли в текстовый файл, добавив «> CRC.txt» в Аргументы команды «Параметры отладки», но я просто хотел узнать, как я могу включить метод ofstream в это.

Заранее спасибо.

+0

@rozina возгласами выглядит это: int_cdecl – terbubbs

+1

Я хотел бы удалить цикл и начать отладки на фиксированное число. Также возникает вопрос, почему вы сохраняете результат sprintf в файле? – rozina

+0

, если честно, не уверен. используя исходный код, я не писал и пытался вывести его, это все, что я делаю. @rozina – terbubbs

ответ

5

Вы не сохраняете в файле, что, по вашему мнению, сохраняете. Сначала вы сохраняете результат функции sprintf(), который в вашем случае равен 11. Затем вы сохраняете результат функции printf(), которая в вашем случае равна 11 + 1 (пробел) + 3 + 1 (\ n) = 16. Таким образом, результат 200 раз 1116.

То, что вы хотели сделать

char tempBuf[12]; 
ofstream myfile; 
myfile.open("C:\\CRC.txt"); 
for (i = 0; i < 200; i++, id++) 
{ 
    sprintf(tempBuf, "%011d", id); 
    myfile << tempBuf << ' ';   
    sprintf(tempBuf, "%03d", computeCrc(tempBuf)); 
    myFile << tempBuf << '\n'; 
} 
myfile.close(); 
+0

«% s% 03d \ n» это имело бы какое-либо значение? Я попробовал этот код и, пока «idstring» был выведен правильно, computeCrc (idstring) теперь выводится как отдельные случайные символы и символы. – terbubbs

+0

conputerCrc (idstring) на самом деле является символом unsigned. должен ли я преобразовать это в int? используя atoi? или что-то типа того? – terbubbs

+0

, поэтому я попытался вывести computeCrc (idstring) в int, но он не вернул правильные трехзначные значения. – terbubbs

3

вы ouputing возвращение sprintf() и printf() к файлу. Возврат sprintf() и printf(): int, а не строка, которую вы создаете. Для вывода строки, вам необходимо изменить свой код

for (i = 0; i < 200; i++, id++) 
{ 
    sprintf(idstring, "%011d", id); 
    myfile << idstring; 
    myfile << computeCrc(idstring) << endl; 
} 
+0

спасибо за ясность. – terbubbs

Смежные вопросы