1 Востаннє редагувалося Дмитро-Чебурашка (07.04.2015 16:21:37)

Тема: Покращіти код

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 починається після введення каретки.

Отже, покажіть будь ласка, чи можна переписати той же код красивіше, що б
він працював так само, і як можна переписати його що б він працював не так, а краще?

Экзэшник додаю.

Post's attachments

put-ish.rar 7.99 kb, 350 downloads since 2015-04-07 

2

Re: Покращіти код

Читаю ваші теми, і мені сумно стає.

3

Re: Покращіти код

Коли ж ви нарешті книжки по-людськи будете читати? Беріть якогось Стівена Пратту (або що там ви читаєте) і штудіюйте.

Подякували: Дмитро-Чебурашка1

4

Re: Покращіти код

омг, форматування коду це капец.  *WALL*
Там 20 рядків максимум, а ви умудрились розтягнути на 60  %)

Пробували пройтись в дебаг режимі, дивлячись значення змінних на кожному кроці?

Подякували: Дмитро-Чебурашка1

5

Re: Покращіти код

У вашій персоні помирає хороший дослідник і народжується посередній програміст.

Подякували: koala1

6 Востаннє редагувалося koala (07.04.2015 20:12:30)

Re: Покращіти код

Хочете загадку? Як EOF (-1) відрізняється від символу '\255'? Першого в файлі бути ж не може. Підказка: подивіться, що саме повертає getchar... і подумайте, як виправити вашу програму.
Першу літеру не пише тому, що

 putchar(c); //виводимо першу літеру
 c =getchar(); //вводимо другу літеру
 fwrite(&c, sizeof(char), 1, f);//пишемо другу літеру

system("pause"); - це бидляцтво. Один цей рядок вимагає більше операцій, ніж решта вашої програми.
Ще зауваження будуть, коли вирівняєте відступи і напишите, які вам зауваження (warnings) видав компілятор (чи виправите їх самі).
Так, і це pure C чи плюси?

Подякували: Дмитро-Чебурашка1