2013-04-09 10 views
0

Вот сегмент моего кода, он должен создать массив из 10 случайных чисел, напечатать их в файле, затем он упорядочивает и добавляет упорядоченный массив в файл,Целые числа, являющиеся символами в файле в C

Как остановить целые числа, отображаемые как символы ascii в файле?

size=10; 
int nums1[size]; 
for(i=0;i<size;i++) 
{ 
    nums1[i]=rand(); 
} 

FILE *fp; 
if((fp=fopen("ARRAY_1", "w"))==NULL) { 
    printf("Cannot open file.\n"); 
} 
if(fwrite(nums1, sizeof(int), size, fp) != size) { 
    printf("File read error."); 
} 
fclose(fp); 

bubblesort(nums1,size); 

if((fp=fopen("ARRAY_1", "a"))==NULL) { 
    printf("Cannot open file.\n"); 
} 
if(fwrite(nums1, sizeof(int), size, fp) != size) { 
    printf("File read error."); 
} 
fclose(fp); 
+0

Вы имеете в виду, что хотите преобразовать их в строки? –

ответ

1

Вы не можете ожидать текст в файле, если вы используете fwrite и записываете с ним двоичные данные. Используйте fprintf вместо orstream (C++).

0

Вы просто записываете массив в виде двоичного фрагмента данных в файл.

Если вы хотите вывести элементы массива, вам понадобится что-то вроде fprintf(fp, "%d", nums[i]); в цикле.

+0

-1, я думаю, что это полная противоположность тому, что хочет OP, поскольку это сохранит числа как строки. – unwind

+0

@unwind, На мой взгляд, если новичок говорит, что они хотят, чтобы целые числа печатались в файл, тогда они хотят, чтобы целые строки были сжаты, а не как двоичный дамп. ICBW, однако, только OP может уточнить .... – Vicky

1

fwrite просто позвонит fputc, который выдает указанный байт указанному файлу. Когда вы откроете этот файл в текстовом редакторе, он будет интерпретировать эти данные как коды ASCII. Вы можете проверить фактическое содержимое файла, используя команду od (для Linux) или Debug (для Windows) для отображения различных представлений данных в этом файле.

Если вы хотите, фактическое число появляться в качестве символа в текстовом редакторе, используйте fprintf:

int i; 
for(i = 0; i < size; i++) { 
    if(fprintf(fp, "%d ", nums1[i]) < 0) { 
     /* An error occurred */ 
    } 
} 

fprintf будет работать, как вы ожидали, потому что преобразует аргумент (т.е. nums1[i]) в формате указанный в качестве второго аргумента.

Для примера рассмотрим

fprintf(stdout, "%d", 1);

Здесь fprintf будет взять номер 1 и преобразовать его в ASCII-эквивалент (ASCII-код в десятичной системе счисления 49) и вывод, что ASCII-код на стандартный вывод.

+0

«Затем он преобразует это в печатный символ и выводит его в указанный файл». Нет, 'fputc' просто пишет байт, означает ли это печатный символ или нет. –

+0

@ DanielFischer, да, абсолютно. Я сказал это неправильно. Теперь я отредактировал свой ответ, чтобы лучше объяснить, что происходит. Спасибо, что указали это! –

+0

Да, намного лучше. Я не думаю, что здесь вообще нужно упомянуть 'fputc', говоря, что' fwrite' просто пишет байты из памяти в файл, было бы достаточно, но это не повредит. –