我在scanf_s()方面遇到了一些问题;功能或开关功能,我第一次运行我的代码它不识别正确的字符并循环回到开头,但之后它工作得很好。这是一个简单的计算器。
由于我刚刚开始学习编程,因此可能有一些简单的解决方案,但我无法找到它。
所有文字都是芬兰语,但我希望代码本身是可以理解的。
欢迎所有反馈,因为我渴望了解我应该做什么,不应该做什么。
#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;
}
}
答案 0 :(得分: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.24
建议删除fflush(stdin);
,因为它不可移植,可能/可能无法按预期工作。