2015-12-06 6 views
-2

Мне нужно написать строку в файле, например: «Via Leopardi 38». Я думаю, что цикл и char с помощью char-печати - лучшая система, потому что у нее нет проблем, связанных с ненулевыми завершенными строками. Проблема заключается в том, что когда петля поступает к нулевому символу (пробел между «Via» и «Leopardi», цикл заканчивается, и он записывает только «Via». Есть ли другое тестовое условие для цикла, который я мог бы использовать?Запись строк в файлах в ISO C89

FILE *fo = open(filename,"w"); 

for (j=0;isalnum(phonebook[i].addr[j])!=0;j++) { 


fprintf(fo,"%c",phonebook[i].addr[j]); 

} 
+0

ли вы на самом деле использовать нулевой символ между «Via» и «Леопарди Msgstr "Разве это не обычные пробелы (ASCII 0x20)? – MikeCAT

+0

Прошу прощения, я совершил тупую ошибку, я говорил о пробелах, когда вы нажимаете клавишу пробела на клавиатуре. – Luke

ответ

0

Пробелы не алфавит, ни цифр, так isalnum(phonebook[i].addr[j]) возвратит 0 и петля TLE заканчивается.

Попробуйте использовать phonebook[i].addr[j]!=0 как условие.

+0

Он пишет: «через леопарди 38НиНи». Он должен написать «через леопарди». Я не знаю почему. – Luke

+0

Вы тестируете isalnum(), который принимает как буквы, так и цифры. Кажется, вы просите только буквы, это тест isalpha(). Если вам нужно избегать трейлинг-пространств, вам также нужно либо проверить их после окончания цикла, либо отложить их добавление до тех пор, пока вы не обнаружите хотя бы еще одну действительную букву, – StephenG

+0

@Luke: так будет ваша 'addr' правильно нулевая строка C ? Или это массив некоторых фиксированных размеров - и полностью заполнен? Что вы видите, когда просто «печатаете»? – usr2564301