我想知道如果用户最后按下随机按钮如何使编译器重复自身。但如果用户按“0”,编译器就会退出。
我的代码:
#include<stdio.h>
#include<stdlib.h>
#include <math.h>
#include <float.h>
struct mystruct
{
float startnummer;
float hoppnummer;
float svarighetsgrad;
float domarpoangs[7];
};
int main(void)
{
struct mystruct data;
float max = 0;
float min = FLT_MAX;
float sum = 0;
float avg = 0;
int i = 0;
float resultat = 0;
printf("Startnummer: \n");
scanf_s("%f", &data.startnummer);
printf("Hoppnummer:\n");
scanf_s("%f", &data.hoppnummer);
printf("Svarighetsgrad:\n");
scanf_s("%f", &data.svarighetsgrad);
for (i = 0; i < 7; i++)
{
printf("domarpoang %d\n", i + 1);
float f;
if (scanf_s("%f", &f) == 1)
{
if (f < min) min = f;
if (f > max) max = f;
data.domarpoangs[i] = f;
}
else
{
printf("error parsing float\n");
exit(0);
}
}
system("cls");
printf("Startnummer: %.1f \n", data.startnummer);
printf("Hoppnummer: %.1f\n", data.hoppnummer);
printf("Svarighetsgrad: %.1f\n", data.svarighetsgrad);
for (i = 0; i < 7; i++)
{
printf("Domarpoang %d: %.1f\n", (i + 1), data.domarpoangs[i]);
}
for (i = 0; i < 7; i++)
{
sum += data.domarpoangs[i];
}
sum = sum - (max + min);
avg = sum/5;
resultat = avg * 3 * data.svarighetsgrad;
printf("Hoppoang:%.2f \n", resultat);
printf("Tryck tangent for nytt hopp!");
getchar();
getchar();
return 0;
}
*如果用户按随机按钮,编译器会从头开始重复 *如果用户按0,编译器退出。
感谢任何帮助,谢谢。
最佳答案
这个答案在您的 main()
代码主体中放置了一个循环,并注意为下一次迭代重新初始化一些变量。
关于获取键盘输入和清除碎片有很多问题。我知道没有简单的标准方法来测试键盘输入,例如kbhit()
,以获取单个按键输入,例如getch()
或用于冲洗输入。即使 getchar()
也很糟糕 - 在您按下“Enter”键之前它不会返回,它会留在输入缓冲区中。这导致了许多 SO 答案,其中的 scanf()
格式难以理解(对我来说)来刷新输入,或测试 if (getchar() == EOF)
- 其中不响应“Enter”键。
所以我在 main()
代码周围放置了一个简单的包装器,当输入“0”后跟一个控制字符时终止(因为 fgets()
附加换行符)或终止符。这消除了清理输入的需要 - 除非用户输入一些愚蠢的输入。吉戈!
#include <stdio.h>
#include <float.h>
#define BUFFSIZE 10
struct mystruct {
float startnummer;
float hoppnummer;
float svarighetsgrad;
float domarpoangs[7];
};
int main(void)
{
char kbuff [BUFFSIZE+1];
struct mystruct data;
float max;
float min;
float sum;
float avg;
int i;
float resultat;
do {
max = 0; // initialise for each loop
min = FLT_MAX;
sum = 0;
printf ("Body of your main loop\n");
fgets(kbuff, BUFFSIZE, stdin);
} while (kbuff[0] != '0' || kbuff[1] >= ' ');
return 0;
}
关于c - 如何让编译器重复直到按下数字0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28285063/