简单的计数器不能在C中工​​作

时间:2014-12-03 07:37:27

标签: c loops counter

我是C的新手遇到了一个问题,我想你们中的一些人过去可能会遇到这个问题。我正在尝试编写一个程序,用户输入一堆成绩,程序会告诉你输入了多少A,B,C,D,Fs。 然而,问题是我的成绩计数器不会起作用。

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

//MACRO
#define F_Range (0-49)
#define D_Range (50-59)
#define C_Range (60-69)
#define B_Range (70-79)
#define A_Range (80-100)
#define A_COUNTer
#define B_COUNTer
#define C_COUNter
#define D_COUNTer
#define F_COUNTer
//Function Prototype
void display(void);

int main(int argc, char** argv) {
    {

        float input, F_Counter, D_Counter, C_Counter, B_Counter, A_Counter;
        printf("Total Number of grades 'A' (80-100) = %.2f",A_Counter);
        //the rest of the displays would go here
        do
        {
            fflush (stdin);
            scanf("%f",&input); //Get input from user
            if (input == F_Range);
            {
                F_Counter++;
            }
            if (input == D_Range);
            {
                D_Counter++;
            }
            if (input == C_Range);
            {
                C_Counter++;
            }
            if (input == B_Range);
            {
                B_Counter++;
            }
            if (input == A_Range);
            {
                A_Counter++;
            }

        }

        while (input != 999);
        //Exit
        {

        }
        return 0;
    }
}

6 个答案:

答案 0 :(得分:1)

好的,所以当你使用#define x y开始时,你只需说&#34;将所有引用更改为&#39; x&#39;用&#39; y&#39;&#34;所以当你有

#define C_Range (60-69)

然后

 if (input == C_Range );

it itpute as

 if (input == (60-69));

这没有任何意义,加上你有&#34 ;;&#34; if陈述末尾没有任何意义

改为使用:

#define F_RangeLow 0
#define F_RangeHigh 49

和if语句

 if (input >= F_RangeLow &&  input <= F_RangeHigh )

现在你需要做的另一件事是用0表示启动计数器,因为你想从0开始统计数据......

float F_Counter=0;

不需要2&#34; {&#34;在main的开头 这已足够了:

int main(int argc, char** argv) {
.
.
.
}

答案 1 :(得分:0)

您的计数器变量未初始化。所以,他们持有未知的价值观。因此,您必须将float input, F_Counter, D_Counter, C_Counter, B_Counter, A_Counter;更改为float input, F_Counter=0, D_Counter=0, C_Counter=0, B_Counter=0, A_Counter=0;

答案 2 :(得分:0)

float input, F_Counter, D_Counter, C_Counter, B_Counter, A_Counter;

main()上下文中,您正在递增这些值,并且它们都没有被初始化。当你有未初始化的vairables时,你有未定义的行为。

值应该像

一样初始化
float input =0,F_Counter=0;/* similarly for the rest */

使用宏检查范围也需要修复(0-49)并不意味着您要检查0到49的范围。在这些情况下应使用比较运算符。

答案 3 :(得分:0)

您的代码有多个主要问题。

首先,您的Range宏不会扩展为正常工作代码:

#define F_Range (0-49)
…
if (input == F_Range);

这扩展为:

if (input == (0-49));

仅当input-49时才为真。如果你想检查input是否在0到49之间,你必须明确地这样做:

if (input >= 0 && input <= 49)

鉴于您目前对C的理解程度,如果您现在不使用宏,这可能是最好的。让他们独自一人,完整地写出代码,并在掌握了语言后开始使用宏。


以下一行:

printf("Total Number of grades 'A' (80-100) = %.2f",""A_Counter);
                                                    ^^

有一对杂散的引号。 (这甚至可以编译吗?)


此外:

  • 您在上面提到的if声明的末尾有一个分号,这使得它无法正常工作。
  • 您的计数器变量未初始化为零。

答案 4 :(得分:0)

尝试类似的东西

#define F_Range(x) (x>=0 && x<=49)?true:false
#define D_Range(x) (x>=50 && x<=59)?true:false
#define C_Range(x) (x>=60 && x<=69)?true:false 
#define B_Range(x) (x>=70 && x<=79)?true:false 
#define A_Range(x) (x>=80 && x<=89)?true:false 

        scanf("%f",&input); //Get input from user
        if (F_Range(input));
        {
            F_Counter++;
        }
        else if (D_Range(input))
        {
            D_Counter++;
        }
        else if (C_Range(input))
        {
            C_Counter++;
        }
        else if (B_Range(input))
        {
            B_Counter++;
        }
        else if (A_Range(input))
        {
            A_Counter++;
        }

答案 5 :(得分:0)

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

#define S_(x) #x
#define S(x) S_(x)
#define RANGE_S(x) S((x##_Range))
#define COUNTER(x) x##_Counter
#define DISP(x) \
printf("Total Number of grades '%c' %s = %d\n",\
    CHAR(x), RANGE_S(x), COUNTER(x))
#define CHECK(var, x) atoi(S(x##_Range)) <= var
#define CHAR(x) *#x

#define F_Range  0-49
#define D_Range 50-59
#define C_Range 60-69
#define B_Range 70-79
#define A_Range 80-100

void display(void);

int main(int argc, char** argv) {
    float input;
    int COUNTER(A)=0, COUNTER(B)=0, COUNTER(C)=0, COUNTER(D)=0, COUNTER(F)=0;

    while(scanf("%f", &input)==1 && input != 999.f){
        if (CHECK(input, A)){
            ++COUNTER(A);
        } else if(CHECK(input, B)){
            ++COUNTER(B);
        } else if(CHECK(input, C)){
            ++COUNTER(C);
        } else if(CHECK(input, D)){
            ++COUNTER(D);
        } else if(CHECK(input, F)){
            ++COUNTER(F);
        }
    }
    DISP(A);
    DISP(B);
    DISP(C);
    DISP(D);
    DISP(F);
    return 0;
}