Как заставить текст в printf появляться сразу после scanf в C? - PullRequest
0 голосов
/ 10 октября 2019

Я хочу сделать калькулятор на 4 операции ... пользователь должен ввести плавающие 3 переменные для A и B и char для +, *, ... Он набирает A, opB и затем нажимает кнопку ввода, чтобы показать результат. Я хочу, чтобы что-то вроде A op B = Result появилось в консоли, все 4 в одной строке.

#include <stdio.h>
int main()
{
    float A = 1, B = 1, R = 1;
    char op = '+';

    printf ("entrer A op B (sans espaces)\n");
    scanf ("%f%c%f", &A, &op, &B);


    switch (op)
    {
        case 43 :
            R = A+B;
            break;
        case 45 :
            R = A-B;
            break;
        case 42 :
            R = A*B;
            break;
        case 47 :
            if (B!=0)
            R = A/B;
            else
            printf ("on peut pas diviser sur 0");
            break;
        default :
            printf ("seulement les operations +,-,*,/ peuvent etre realiser, une par une, veuillez resseyer la saisie de votre operation");
            break;
    }
    if (B!=0 && (op =='+' || op =='-' || op =='*' || op =='/'))
    printf ("\b= %.2f", R);
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Ну, я не знаю, правильно ли я понял, что вы хотите, но вот что:

printf(" %f.2 %c %f.2 = %f.4",A,op,B,R);

должен дать один ответ на вопрос, который вы задаете.

printf ("\b= %.2f", R);

делаетне имеет смысла в этом случае, потому что он печатает только знак равенства (=) и результирующее значение R на мониторе и в программе раньше не является отпечатком других значений A, op и B предоставляется.

0 голосов
/ 10 октября 2019

вы можете использовать в sprintf для всей строки.

уведомление в строке:

    scanf ("%f%c%f", &A, &op, &B)

оно получает "enter" как "\ n" (ascii 10)

вам нужно пространство между ними:

    #include <stdio.h>

int main() 
{
    float A = 1, B = 1, R = 1;
    char op = '+';
    char ans[32];
    printf ("entrer A op B (sans espaces)\n");
    scanf("%f %c %f", &A, &op, &B);

    switch (op)
    {
        case '+' :
            R = A+B;
            break;
        case '-' :
            R = A-B;
            break;
        case '*' :
            R = A*B;
            break;
        case '/' :
            if (B!=0)
            {
                R = A/B;
            }
            else
            {
                printf ("on peut pas diviser sur 0");
            }
            break;
        default :
            printf ("seulement les operations +,-,*,/ peuvent etre realiser, une par une, veuillez resseyer la saisie de votre operation");
            break;
    }

    if (B!=0 && (op =='+' || op =='-' || op =='*' || op =='/'))
    {
        sprintf(ans,"%.2f %c %.2f \b= %.2f\n", A, op, B, R);
    }

    printf("%s", ans);

    return 1;
}

вам нужно проверить A, а B это число (проверьте команду "isdigit ()"). почему "B! = 0"?

Если вы хотите, вы можете получить все упражнения от пользователя как одну строку "4 + 5" и проанализировать ее (я так понимаю, вы новичок в C. Parser очень полезен ת Вам лучшепопрактиковаться)

...