【问题标题】:C Teacher Usage Grading ProgramC 教师使用评分计划
【发布时间】:2019-04-11 11:10:27
【问题描述】:

我正在尝试制作一个程序,以便老师可以输入一个数字,它会以 C 语言输出相应的字母等级。这是我到目前为止所拥有的,我正在尝试让控制台程序保持打开状态,直到教师输入退出或单击 X 图标。我很感激任何帮助。

#include <stdio.h>
#include<stdlib.h>
#define exit -1

int main(void) {

    int grade;


    printf("Enter student grade: ");
    scanf_s("%d", &grade);
    printf("Students grade is: %d", grade);

    while (grade != exit) {

        if (grade < 65)
        {
            printf("\nStudent grade is: F\n");
        }
        else if (grade <= 69)
        {
            printf("\nStudent grade is: D\n");
        }
        else if (grade <= 79)
        {
            printf("\nStudent grade is: C\n");
        }
        else if (grade <= 89)
        {
            printf("\nStudent grade is: B\n");

        }
        else if (grade <= 100)
        {
            printf("\nStudent grade is: A\n");
        }
        else if (grade == exit) {
        #define EXIT_SUCCESS 0;
        }
        break;
    }
    printf("Enter student grade: ");
    scanf_s("%d", &grade);
    printf("Students grade is: %d", grade);
    return 0;
}

【问题讨论】:

  • 什么不起作用?您的输入请求不在循环内。
  • #define EXIT_SUCCESS 0; 这应该做什么?
  • 只需将getchar() 放在return 0; 之前
  • 你说“直到老师输入退出”,但你还没有准备好接受“退出”作为输入——你只是在扫描数字输入......而不是检查是否输入已成功解析为数字...
  • 有几种方法可以处理可能是字符串或数字的输入;例如,您可以输入一个字符串,然后测试该字符串是否可以解析为数字……但我强烈认为您应该只提示用户 Enter student grade or '-1' to exit 并专注于更基本的问题,例如错误检查您的函数调用返回值,将输入逻辑放在正确的位置以使其重复,重新考虑您尝试使用 EXIT_SUCCESS 的内容以及其他基本内容

标签: c


【解决方案1】:

想通了,谢谢你的帮助。

#include <stdio.h>
#include<stdlib.h>
#define exit -1

int main(void) {

    int grade;


    printf("Enter student grade , or '-1' to exit \n");
    scanf_s("%d", &grade);
    while (grade != exit) {
        printf("Students grade is: %d", grade);
        if (grade < 65)
        {
            printf("\nStudent grade is: F\n");
        }
        else if (grade <= 69)
        {
            printf("\nStudent grade is: D\n");
        }
        else if (grade <= 79)
        {
            printf("\nStudent grade is: C\n");
        }
        else if (grade <= 89)
        {
            printf("\nStudent grade is: B\n");

        }
        else if (grade <= 100)
        {
            printf("\nStudent grade is: A\n");
        }
        else if (grade == exit) {
            exit;
        }
        printf("Enter student grade , or '-1' to exit \n");
        scanf_s("%d", &grade);
    }
    fgetc(stdin);
    return 0;
}

【讨论】:

    【解决方案2】:

    回答之前的一些事情:请在提交之前做一些研究、学习和理解此代码。我不是说你会,但是很多和我一起上学的学生会盲目地复制和粘贴他们的作业,从长远来看这只会伤害你。它没有你想的那么复杂,一旦你学会了逻辑,它就会变得容易得多。

    我建议你为这个作业学习一些资源:Convert char array to a int number in Chttps://www.tutorialspoint.com/c_standard_library/c_function_sscanf.htm

    如果您希望能够在同一个数组中输入单词“exit”或int,则需要将其写入char数组。这个想法是将字符串转换为整数,如果它是一个数字。您可以使用 sscanf 或 atoi 之类的方法来执行此操作。

    如果您输入“exit”,则区分大小写。您可以使用 for 循环将所有大小写变为小写或大写。在我的例子中,我接受用户输入并将其与我的数组 exit_Array 进行比较。如果它返回 0(它匹配),它会进入下一个退出程序的阶段。

    如果它是 int,则进入第 1 阶段,即分级。一旦它被分级,它会将相位降低 1,因此它变为 0(再次进入第一个循环)。它将一遍又一遍地执行此操作,直到用户输入“退出”。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
    char input_Array[3];
    char exit_Array[] = "exit";
    
    int grade;
    int phase = -1;
    
    phase++;
    while(phase == 0)
    {
        printf("Enter student grade: ");
        scanf("%s", input_Array);
    
        // Converts all letters to lower case so it can be Exit, eXiT, etc.
        for(int i = 0; i <= strlen(input_Array); i++)
        {
            input_Array[i] = tolower(input_Array[i]);
        }
    
        // Exit Input
        if(strcmp(input_Array, exit_Array) == 0)
        {
            printf("Goodbye!");
            exit(0);
        }
        else
        {
            // Convert String to Number
            grade = atoi(input_Array);
        }
        phase++;
    
        while(phase == 1)
            {
                if (grade < 65)
                    {
                        printf("Student grade is: F\n");
                    }
                else if (grade <= 69)
                    {
                        printf("Student grade is: D\n");
                    }
                else if (grade <= 79)
                    {
                        printf("Student grade is: C\n");
                    }
                else if (grade <= 89)
                    {
                        printf("Student grade is: B\n");
                    }
                else if (grade <= 100)
                    {
                        printf("Student grade is: A\n");
                    }
                phase--;
            }
    }
    
    return 0;
    }
    

    【讨论】:

    • 我在 onlinegdb 上仔细检查了它似乎在那里工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2014-12-14
    相关资源
    最近更新 更多