2

我在使用 scanf_s(); 时遇到了一些问题。函数或 switch 函数,我第一次运行我的代码时,它无法识别正确的字符并循环回到开头,但之后它就可以正常工作了。这是一个简单的计算器。

由于我刚刚开始学习编程,因此可能有一些简单的解决方案,但我找不到它。

所有的文字都是芬兰语,但我希望代码本身是可以理解的。

欢迎所有反馈,因为我渴望了解我应该做什么和不应该做什么。

#include <stdio.h>
#include <stdlib.h>

float luku1 = 0;
float luku2 = 0;
float tulos = 0;
char valinta = '\0';

int main()
{
    system("cls");
    printf("Minkä laskusuorituksen haluaisit tehdä? (+,-,*,/)\n");
    fflush(stdin);
    scanf_s("%c", &valinta);
    switch (valinta){
    case '+':
        printf("Anna yhteenlaskettavat luvut.\n>");
        scanf_s("%f %f", &luku1, &luku2);
        tulos = luku1 + luku2;
        printf("Lukujen summa on %4.2f\n", tulos);
        break;
    case '-':
        printf("Anna vähennettävät luvut.\n>");
        scanf_s("%f %f", &luku1, &luku2);
        tulos = luku1 - luku2;
        printf("Lukujen summa on %4.2f\n", tulos);
        break;
    case '*':
        printf("Anna kerrottavat luvut.\n>");
        scanf_s("%f %f", &luku1, &luku2);
        tulos = luku1 * luku2;
        printf("Lukujen tulo on %4.2f\n", tulos);
        break;
    case '/':
        printf("Anna jaettavat luvut.\n>");
        scanf_s("%f %f", &luku1, &luku2);
        if (luku2 == 0)
        {
            printf("Nollalla ei voida jakaa.\n");
            system("pause");
            main();
        }
        else
        {
            tulos = luku1 / luku2;
            printf("Lukujen jako on %4.2f\n", tulos);
        }
        break;
    default:
        printf("En tunnistanut laskutoimitusta, yritä uudelleen.\n");
        system("pause");
        main();
        break;
    }
}
4

1 回答 1

0

scanf_s("%c", &valinta);需要另一个参数。@mafso

 scanf_s(" %c", &valinta, 1);

之前添加一个空格"%c"将有助于scanf_s(" %c", &valinta);再次调用代码。

“fscanf_s 函数等效于 fscanf,除了c、s 和 [ 转换说明符适用于一对参数(除非赋值抑制由 * 指示)。这些参数中的第一个与 fscanf 相同。那个参数在参数列表中紧随其后的是第二个参数,它的类型为 rsize_t,并给出数组中由该对的第一个参数指向的元素的数量。"

C11dr §K.3.5.3.2 4


建议放弃fflush(stdin);,因为它是不可移植的,并且可能/可能无法按预期工作。

于 2014-09-14T17:10:43.803 回答