Популярные вопросы начинающих!

йцукенгшщзхъ

Active Member
Регистрация
24.06.2020
Сообщения
43
Здравствуйте! Почему в этой программе на одном компьютере все получается, на другом - при любом введенном символе упорно выдает символ "м"? На обоих компьютерах стоит Visual Studio.
C:
#include<stdio.h>
#include<locale.h>
int main(void)
{
setlocale(LC_ALL,"rus");
char simvol;
printf("Введите символ\n");
scanf_s(" %c", &simvol);
printf("Символ %c", simvol);
return 0;
}
 

йцукенгшщзхъ

Active Member
Регистрация
24.06.2020
Сообщения
43
Поменял разрядность платформы решения с x86 на x64 (на первом компьютере был виндовс 7 на другом виндовс 10 оба 64 разрядные. Работало на виндовс 10. Теперь на виндовс 7 тоже работает.
 

йцукенгшщзхъ

Active Member
Регистрация
24.06.2020
Сообщения
43
Здравствуйте!
Почему-то не работает этот код. Когда убираешь if и программа сначала шифрует, а потом расшифровывает текст всё работает. А когда добавляешь, она спрашивает, что вы хотите ввести 1 или 2, а потом заканчивает программу и не даёт ввести текст. Вот код.
C:
#include <stdio.h>
#include <ctype.h>
#include <locale.h>
int main(void)
{
    setlocale(LC_ALL, "rus");
    char ch;
    int n;
    printf("Здравствуйте! Это программа использует метод посимвольного шифрования,");
    printf(" исключая пробелы и знаки пунктуации.\n");
    printf("Для шифровки текста нажмите 1, для расшифровки 3.\n");
    scanf_s("%d", &n);
    if (n == 1)
    {

        while ((ch = getchar()) != '\n')
        {
            if (isalpha(ch))
                putchar(ch + 1);
            else
                putchar(ch);
        }
        putchar(ch);
    }
    if (n == 2)
    {
        printf("Введите текст который хотите расшифровать.\n");
        while ((ch = getchar()) != '\n')
        {
            if (isalpha(ch))
                putchar(ch - 1);
            else
                putchar(ch);
        }
        putchar(ch);
        printf("Вот результат. Спасибо за то, что использовали нашу программу.\n");
    }
    return 0;
}
Как исправить? Заранее спасибо!:):):)
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 050
Если я правильно понял, то этим условием ты выбираешь действие. То есть выполняется или 1 или 2. Но не вместе.
А в случае без условий программа последовательно выполняет шифровку и дешифровку.

При этом допущена большая ошибка - n у тебя не определена. Не назначается ей ничего.
То есть по логике должно быть как-то так
C:
if ( (n = getchar()) == 1 ){}
 

йцукенгшщзхъ

Active Member
Регистрация
24.06.2020
Сообщения
43
Я так и хотел, что бы пользователь выбирал, что он хочет зашифровать или расшифровать. А n определяется scanf_s("%d", &n); разве не так?
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 050
Наверное да. Не заметил.
Во время отладки/поиска ошибки можно использовать вывод в консоль на каждой строке.
То есть как-то так

C:
#include <stdio.h>
#include <ctype.h>
#include <locale.h>
int main(void)
{
    setlocale(LC_ALL, "rus");
    char ch;
    int n;
    printf("Здравствуйте! Это программа использует метод посимвольного шифрования,");
    printf(" исключая пробелы и знаки пунктуации.\n");
    printf("Для шифровки текста нажмите 1, для расшифровки 3.\n");
    scanf_s("%d", &n);
    if (n == 1)
    {
    printf(" 1.\n");
        while ((ch = getchar()) != '\n')
        {
            printf(" 1.1 \n");
            if (isalpha(ch))
                printf(" 1.2 \n");
                putchar(ch + 1);
            else
                printf(" 1.3 \n");
                putchar(ch);
        }
        putchar(ch);
    }
    if (n == 2)
    {
        printf("Введите текст который хотите расшифровать.\n");
        while ((ch = getchar()) != '\n')
        {
            printf(" 2 \n");
            if (isalpha(ch))
                printf(" 2.1 \n");
                putchar(ch - 1);
            else
                printf(" 2.2 \n");
                putchar(ch);
        }
        putchar(ch);
        printf("Вот результат. Спасибо за то, что использовали нашу программу.\n");
    }
    return 0;
}
Так ты поймёшь на каком моменте проблемы.
Ещё также можно выводить переменную после присвоения (не уверен, что правильно воспользовался функцией printf)
Код:
    scanf_s("%d", &n);
    printf(n);
На Си есть отдельно отладка и брекпоинты. Ими полезно будет научится вместо того что выше показал, полезно будет в будущем.
 
Верх Низ