Попытка написать программу для суммирования значений типа int и char - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь написать программу на C для суммирования значения целого числа и символа.Если пользователь вводит целое число там, где должен быть символ, я ожидаю, что моя программа рассчитает значение двух целых чисел.Мой код ниже работает с пользователем, вводящим 2 целых числа, но вычисляет только до 9 (Пример: 4 5: «Символ« 4 »представляет собой цифру. Сумма« 4 »и« 5 »равна 9»).Если пользователь вводит 5 6, результат будет следующим: «Символ« 5 »представляет цифру. Сумма« 5 »и« 6 »есть;».Я долго искал, и любое потенциальное решение всегда приводит к неправильной сумме.Я также ожидаю, что моя программа будет принимать пользовательский ввод выше '9' (например: 20 50), но если я изменю '9' на '99', я получу следующее предупреждение: "warning: многосимвольная константа [-Wmultichar]».Может кто-нибудь указать мне правильное направление для достижения этих целей?

#include <stdio.h>
int sum (int m, char n){
    return m+n;
}

int main(){
    char ch;
    int c;
    printf("Enter an integer and a character separated by a blank> ");
    scanf("%d %c",&c, &ch);
    if((c >= '0' && c <= '9')||(ch >= '0' && ch <= '9')){
        int cs = sum(c, ch - 0);
        printf("Character '%d' represents a digit. Sum of '%d' and '%c' is %d" , c, c, ch - 0, cs);
    }
    return 0;
}

Ответы [ 2 ]

2 голосов
/ 11 мая 2019
int cs = sum(c, ch - 0);

Похоже, что вы пытаетесь учесть значения ASCII, вычитая значение ASCII 0 из любого символа, который вводит пользователь. Однако вы использовали целочисленный литерал 0, когда вы хотите использовать символьный литерал '0'. Смотри ниже:

int cs = sum(c, ch - '0');

Кроме того, я бы порекомендовал переименовать ваш int в i или что-то, кроме c. Немного трудно различить, что типы c и ch разные.

Также рассмотрите возможность изменения

if((c >= '0' && c <= '9')

до

if((c >= 0 && c <= 9)

c - целое число, и вы должны сравнить его как таковое. Используя '', вы в основном выполняете приведение к переменной char, которая здесь не нужна. Другая проблема заключается в том, что я не думаю, что вы сможете выполнить то, что пытаетесь сделать, используя переменную char для двузначного числа. Переменная типа char может содержать один символ, а двузначное число состоит из двух символов.

1 голос
/ 11 мая 2019

Извините, я не могу комментировать, поэтому я добавляю этот ответ для проблемы, используя только одну цифру.

У вас есть один символ

char ch;

Так что он только для чтенияодин символ, вам нужен массив символов типа char ch[10]

Тогда вы будете использовать int foo = atoi(ch) для преобразования вашего массива в целое число

...