Тема: Покращіти код
int main()
{
char c;
c='A';
while(c<='Z')
{
putchar(c);
c=c+1;
}
system("pause");
// №№№№№№№№№№№№№№№№№№№№№№
const char *fname = "fi.txt";FILE *f;
if ((f = fopen(fname, "wb+" )) == NULL)
{
printf("\n\nError opening of the file1 file for reading!");
getchar();
return 1;
}
c = getchar();
do {
if ( c == EOF )
break;
putchar(c);
c =getchar();
fwrite(&c, sizeof(char), 1, f);
char NOL='0';
} while ( Str != NOL );
if (( int fc = fclose(f )) != NULL)
{
printf("\n\nError fclose!",fc);
getchar();
return 1;
}
return 0;
}
Ось приблизно такий код.
Дослідницьким шляхом з'ясувалося, що файл створюється, символи в нього пишуться
переведення каретки починає все писати у більш нижчій рядок
причому якщо у введеному рядку є нулі те програма виходить (завершується)
і ще при цьому у більш нижчій рядок потрапляє зміст попереднього.
А якщо ввести Ctrl z так в консолі видно z з вертикальним куточком перед над ним.
І тоді в нижчій рядок потрапляє все тільки лиш до введення Ctrl z.
І у файл пишеться ніби все тільки лиш до введення Ctrl z.
нулями я нібито вгадав! Начебто працює як
і очікувалося; тільки по ходу, видно,
цикл відбувається тільки після переведення каретки!
І не зовсім так як я хотів пишеться в файл, я в ньому ще код Ctrl + Z
подивитися хотів, Хекс редактором.
Та й пишеться схоже не завжди і не всі !! треба ще перевірити....
Таким чином з'ясовується що c=getchar (); у цьому коді
пропускає дію далі тільки після введення каретки.
Як тоді в змінну c поміщується фигова строка- близько 10-20
символів з пробілами- якщо вона однобайтова char???
В мене тут явно щось не стикуеться- адже якщо цикл
триває після введення каретки, коли вже надрукований
значний рядок, тоді рядок потрапляє в змінну c
іншого тут не дано, а як це, це ж суперечить всьому?
Що таке EOF і з чим його їдять, воно в якому поєднанні клавіш або звідки береться?
Як переписати код красивіше?
Як переписати код так що б він заганяв в створюваний файл
усі усі введені з клавіатури символи, і що б я міг
узяти потім його хекс-редактором?
Першу букву хронічно не пише
ersha
Druga
Treta
Tsetverta
Pyata
Переведення каретки пише 0A.
65 72 73 68 61 0A 44 72 75 67 61 0A 54 72 65 74 61 0A 54 73 65 74 76 65 72 74 61 0A 50 79 61 74 61 0A
При введенні Ctrl z і натисненні переведення каретки, переходить на
нижчій рядок копіюючи туди напис з верхнього . Але при подальшому введенні не
заміщає їого іншими буквами а пише далі відгороджуючи від нових букв маленькою стрілкою!
65 72 73 61 1A 44 72 75 67 61 1A 54 72 65 74 61 1A 74 73 65 74 76 65 72 74 61 1A 70 79 61 74 61 1A 73 79 6F 6D 61 1A
Може бути Ctrl+z це 1A.
getchar () пише в змінну по одній букві, а пропускати нижче починає
після введення каретки. І тоді вже видає усі введені раніше
символи. Але по одному. Хитро, але мабуть так виходить.
Так. Іншими словами, виконання циклу while починається після введення каретки.
Отже, покажіть будь ласка, чи можна переписати той же код красивіше, що б
він працював так само, і як можна переписати його що б він працював не так, а краще?
Экзэшник додаю.