Member 14100682 Ответов: 2

Напишите программу, которая допускает только целочисленный ввод.


Мы написали программу, которая отображает только целочисленные входные данные.Если мы вводим какой-то символ, то он не должен отображаться на экране.

Пожалуйста, объясните, как работает функция getch ().Какое значение сохраняется в ch, когда мы используем ch=getch();.
Когда мы объявляем ch как int, то как в операторе printf печатается значение integer, даже если мы используем спецификатор формата %c?

Что я уже пробовал:

#include <stdio.h>
main()
{
    int x=0;
    x=getIntegerOnly();
    printf("\nYou have entered %d",x);
    getch();

}
int getIntegerOnly()
{
    int num=0;
    int ch;
    for(;;)
    {    ch=getch();
        if(ch>=48 && ch<=57)

        {

           printf("%c",ch);
            num=num*10+(ch-48);
          }
           if(ch==13)
            break;
    }
    return num;
}

2 Ответов

Рейтинг:
1

Patrice T

Цитата:
Пожалуйста, объясните, как работает функция getch ().

Я знаю, что это глупая идея, но вы должны подумать о чтении документации.
Цитата:
Какое значение сохраняется в ch, когда мы используем ch=getch();

вы не понимаете, что делает ваш код.

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
0

OriginalGriff

Если вы посмотрите в документации, вы увидите, что getch извлекает один символ из пользователя: Использование getch(),getche() и getchar() в программировании на C - C[^]

Таким образом, если пользователь нажмет клавишу A, вы получите либо "a", либо " A " в зависимости от его статуса SHIFT и / или CAPS.
Если он нажмет цифровую клавишу, вы получите эту клавишу в виде символа: от "0" до "9"
Обратите внимание, что это не то же самое значение, что девять в целом числе:

int a = 9;
char b = '9';
a и b не содержите одно и то же значение!
Если вы хотите конвертировать, вам нужно изменить символ на число:
int a = 9;
char b = '9';
int c = (int) (b - '0');
Сейчас a и c будет содержать то же самое значение!

Не используйте "магические числа", такие как 48 или 57 - это совсем не очевидно, что вы имеете в виду, когда делаете это:
if( ch >= '0' && ch <= '9')
это намного понятнее и легче читать!


Richard MacCutchan

int c = (int) (b = '0');
Я думаю, что вы имели в виду знак минус во втором выражении.

OriginalGriff

Ключи слишком близко друг к другу ... или я растолстел на Рождество? :смеяться:
Исправлено, спасибо.