Формат определяет тип 'char *', но аргумент имеет тип 'int', какую ошибку я здесь допустил? - PullRequest
0 голосов
/ 19 декабря 2018

Есть ошибка в моем коде, кто-нибудь может помочь с отладкой?Видимо, что-то не так в scanf части, чтобы получить мой x.Инструкции приведены ниже:

Эта программа представляет собой простое введение в приложение на языке C, которое включает отображение консоли, ввод пользователя, строки и циклы.Введите коды, которые будут отображать экран, как показано:

Во-первых, программа предлагает пользователю ввести его или ее имя.Затем будет отображаться

Hello <user name>

Далее распечатывается меню, содержащее 4 параметра:

  1. добавить два целых числа
  2. добавить две строки
  3. вычислить факториал для целого числа меньше, включая 10 или меньше 11
  4. Выйти из программы

Кодировать все 4 задачи соответствующим образом.

Когдазадание завершено (конечно, не включая выход из программы), снова появляется меню и просит пользователя примерить другое задание.Это повторяется до тех пор, пока не будет нажата q или Q .Вы можете использовать switch-case или if-else , но первый выглядит более разборчиво.
Даже если вы знаете, как писать функции, не используйте функции в этой программе.

#include <stdio.h>

char name[20],
     c[1000],
     d[1000],
     x;
int a, b, i, n,
    factorial = 1;

int main() {
    do {
        printf("\nPlease select one:\n");
        printf("**********MENU**********\n");
        printf("1 - add two integers\n");
        printf("2 - add two strings\n");
        printf("3 - compute factorial for integer less and including 10 or less than 11\n");
        printf("Q - quit program\n");
        printf("************************\n");

        scanf("%s", x);

        switch(x) {

        case '1':
            printf("Enter first integer:\n");
            scanf("%d", &a);
            printf("Enter second integer:\n");
            scanf("%d", &b);
            printf("%d + %d = %d\n", a, b, a + b);
            break;
        case '2':
            printf("Enter first string:\n");
            scanf("%s", c);
            printf("Enter second string:\n");
            scanf("%s", d);
            strcat(c, d);
            printf("%s\n", c);
            break;
        case '3':
            printf("Enter integer less than 11:\n");
            scanf("%d", &n);
            if (n > 0 && n < 11) {
                for(i = 1; i <= n; ++i) {
                    factorial *= i;
                }
                printf("factorial of %d is %d\n", n, factorial);
                break;
            }
            else {
                printf("error, please enter an integer\n");
            }

        case 'Q':
            printf("Program quitting...\n");
            break;

        }
    } while (x != 'Q');
}

1 Ответ

0 голосов
/ 19 декабря 2018

x объявляется здесь как символ.

char name[20],
     c[1000],
     d[1000],
     x;

Но при сканировании в x вы используете %s, что для строк.

scanf("%s", &x); 

Правильный способ сканирования символа - scanf("%c",&x);

Кроме того, не забывайте свои операторы импорта и return 0; в конце программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...