Премини към съдържанието
15 години Kaldata.com – време е да почерпим! Прочети още... ×

Препоръчан отговор


Здравейте, в момента съм решил да си направя един шифратор/дешифратор на текст, т.е  потребителят въвежда текст от клавиатурата, програмата преобразява символите и извежда в конзолата кодираният текст, по аналогичен алгоритъм с дешифратор се дешифрова изменения текст и се вижда оригиналния.

 

Идеята ми е следната:  

#include <stdio.h>#include <stdlib.h>encode(){        char str1[300];        char str2[300];        int i=0;        int j=0;        int a[10] = {1,12,10,93,23,54,21,75,24,55};        printf("Vyvedi text do 300 simvola");        gets(str1);                             for (i = 0; str1[i] != '0'; i++)        {            str2[j] = str1[j] + a[j];            if (j = 9) j = 0;            else j++;                        }                puts(str1);        printf("nn");        puts(str2);        return 0;}decode(){        char str1[300];        char str2[300];        int i=0;        int j=0;        int a[10] = {1,12,10,93,23,54,21,75,24,55};                gets(str1);        printf("Vyvedi text do 300 simvola");                for (i = 0; str1[i] != '0'; i++)        {            str2[j] = str1[j] - a[j];            if (j = 9) j = 0;            else j++;                        }                puts(str1);        printf("nn");        puts(str2);        return 0; }main(){      int i = 0;      printf("Vyvedi chislo i natisni Enter :nn");      printf("1: Encoden2:Decode:nn");      scanf("%d", &i);            if ( i = 1 ) encode();      else if (i = 2) decode();      else {           printf("Nepravilen izbornn");            return main();            }                  system("PAUSE");      return 0;}

Проблемът е, че след компилация с Dev-C++ (просто само него имам, сега тегля Borland C++ Builder (но ще има да го тегля до утре.... ) при въвеждане на цифра (1 - за кодиране 2- за декодиране),  програмата сякаш сама въвежда някакви данни и после ми изкарва йероглифи и се прекратява.  

Много ще съм благодарен, ако някой ми помогне да разреша този проблем.

Редактирано от kalata23 (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

 

Много ще съм благодарен, ако някой ми помогне да разреша този проблем.

Пробвайте да четете опцията с getchar(). Или поне да флъшнете буфера на STDIN

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Проблемът е, че след компилация с Dev-C++ (просто само него имам, сега тегля Borland C++ Builder (но ще има да го тегля до утре.... ) при въвеждане на цифра (1 - за кодиране 2- за декодиране), програмата сякаш сама въвежда някакви данни и после ми изкарва йероглифи и се прекратява. Много ще съм благодарен, ако някой ми помогне да разреша този проблем.

Проблемът ти не е в компилатора. Не смесвай форматиран(scanf) с неформатиран(gets) вход. Или си го флъшвай.

Или поне да флъшнете буфера на STDIN

Директното флъшване на stdin е извън стандарта и не трябва да се ползва. В общия случай остава един символ за край на ред, който трябва да се обере. Но както казах, най-доброто решение е да не се смесват. Редактирано от flare (преглед на промените)
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Проблемът ти не е в компилатора. Не смесвай форматиран(scanf) с неформатиран(gets) вход. Или си го флъшвай. Директното флъшване на stdin е извън стандарта и не трябва да се ползва. В общия случай остава един символ за край на ред, който трябва да се обере. Но както казах, най-доброто решение е да не се смесват.

Ок, замених 

scanf("%d", &i);

  с  

i = getchar();    

И пак същото.....  Общо взето дори, да избера опцията decode, пак тръгва функцията encode. Дали не прави проблем, че и двете функции връщат резултат 0 ?  

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ок, замених 

scanf("%d", &i);

  с  

i = getchar();    

И пак същото.....  Общо взето дори, да избера опцията decode, пак тръгва функцията encode. Дали не прави проблем, че и двете функции връщат резултат 0 ?  

Да не натискате ентър след като изберете режима?


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

...

Олее, чак сега ти погледнах програмата по-сериозно. Хващай учебниците пак :) Подсказка: знаеш ли, каква е разликата между операторите '=' и '=='? Подсказка 2: ако не почнеш да гледаш, какво ти изкарва компилатора, никога няма да пишеш смислен код. Подсказка 3: getchar връща char което в C е число. Обаче въвежда от клавиатурата символ. Сравняването на символ с число е съвсем легално и обикновено - грешно :) Редактирано от flare (преглед на промените)
  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

То и аз сега видях, че съм написал = вместо ==. :D: D :D Иначе знам, = е знак за присвояване на стойност == е знак за еквивалентност. Редакция: Дори след редакция на кода, пак няма разлика. А компилаторът не ми дава грешка.

Редактирано от kalata23 (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

То и аз сега видях, че съм написал = вместо ==. :D: D :D Иначе знам, = е знак за присвояване на стойност == е знак за еквивалентност.

Обърни внимание на подсказка 2. Компилатора сигурно е опищял света, за това, ама ти си го проспал. Гледай си warning-ите.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Така, програмата бачка, но въпросът е, има ли начин без да пускам програмата от comman prompt при въвеждане на масива да използвам Paste ?

Редактирано от kalata23 (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.