Почему этот случай переключения идет в случай по умолчанию? - PullRequest
0 голосов
/ 27 марта 2020

Код должен проверять ввод гласных. Если найдено, то будет напечатано «Vowel», а если его нет, то должно быть «consonent». Но компилятор переходит к случаю default независимо от ввода, и я не могу найти, где ошибка. Пожалуйста, помогите.

Вот мой код:

#include<stdio.h>

void main()
{
    char ch;
    printf("Insert a Char \n");
    scanf("%d", &ch);

    switch(ch)
    {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
        printf("Vowel");
        break;

    default:
        printf("Consonent");
    }
}

Ответы [ 4 ]

1 голос
/ 27 марта 2020

Спецификатор преобразования %d в этом вызове

scanf("%d", &ch);

недопустим. Он пытается прочитать число. Поэтому ввод буквы типа «А» приводит к ошибке ввода.

Компилятор может выдать предупреждение или даже сообщение об ошибке, которое, например,

в формате «% d» ожидает аргумент введите 'int *', но аргумент 2 имеет тип 'char *'

Поскольку использование недопустимого формата может привести к неопределенному поведению.

Вот демонстрационная программа

#include <stdio.h>

int main(void) 
{
    char s[] = "ABCD";

    puts( s );

    scanf( "%d", ( int * )s );

    puts( s );

    return 0;
}

Если, например, даже ввести действительный код ASCII, например, 65 буквы 'A', то вывод программы может выглядеть следующим образом:

ABCD
A

То есть память, занятая массив был перезаписан.

Вместо этого используйте следующий вызов. (если вы хотите пропустить пробелы)

scanf( " %c", &ch );

или следующий вызов

scanf( "%c", &ch );

Обратите внимание на согласно стандарту C функция main без параметров должна быть объявлена ​​как

int main( void )
0 голосов
/ 30 марта 2020

Спасибо всем. Я ценю помощь! Я должен был заметить тип данных.

include

void main () {

char ch;
printf("Insert a Char \n");
scanf("%c", &ch);

switch(ch)
{
case 'a':
case 'A':

case 'e':
case 'E':

case 'i':
case 'I':

case 'o':
case 'O':

case 'u':
case 'U':
    printf("Vowel");
    break;

default:
    printf("Consonant");
}

}

0 голосов
/ 27 марта 2020

Первое, что нужно % d принимает целое число, а не символ, поэтому исправьте это и запускайте, затем ставьте разрыв после каждого случая до конца, который по умолчанию. Пример: -

char ch;
printf("Insert a Char \n");
scanf("%c", &ch);

switch(ch)
{
case 'a':printf("Vowel");
    break;

case 'e':printf("Vowel");
    break;

case 'i':printf("Vowel");
    break;

case 'o':printf("Vowel");
    break;

case 'u':
    printf("Vowel");
    break;

default:
    printf("Consonent");
}

Надеюсь, это поможет. Удачного кодирования: -)

0 голосов
/ 27 марта 2020

вы должны использовать "% c" в качестве формата. когда вы используете "% d", значение равно 0 (потому что во входной строке не было обнаружено целых чисел). См. https://en.cppreference.com/w/c/io/fscanf#Example.

Эта проблема, и void main() вместо int main(), должна выдавать предупреждение компилятора.

...