我是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;
}
}
答案 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;
}