c - 如何让编译器重复直到按下数字0

标签 c visual-studio-2013

我想知道如果用户最后按下随机按钮如何使编译器重复自身。但如果用户按“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/

相关文章:

c - 是否可以为数组名称分配一个新值?

php - PHP在32位和64位架构上的区别?

c - 输出参数中带有指向对象的指针的动态数组

c - 写入文件错误

c++ - 使用 boost::asio 和 std::wstring 解析网络节点

c - 读取字符串无法正常进行

c# - Visual Studio 运行不需要的代码

c++ - 使用内部函数时程序崩溃

c# - System.Data.dll 中发生类型为 'System.Data.SqlClient.SqlException' 的异常

c++ - [c++]为什么我的类析构函数被调用了两次?