2012-08-07 33 views
0

帮助,我似乎无法找到我的代码下面的问题。c程序分组学生标记

这是我想要做的:输入一个标记列表。输入以0结尾(0本身不是别人的标记)。输出得分为 的学生人数1)大于或等于85; 2)60和84之间; 3)严格小于60

这里是我的代码:

#include stdio.h 

int main() { 
    int mark; 
    int morethan85 = 0, between60and84 = 0, lessthan60 = 0; 

    for (true) { 
     scanf("%d", &mark); 
     if (mark != 0) { 
      if (mark >= 85) 
       morethan85 = morethan85 + 1; 
      else if (mark < 85 && mark >= 60) 
       between60and84 = between60and84 + 1; 
      else 
       lessthan60 = lessthan60 + 1; 
     } else 
      break; 
    } 

    printf(">=85:%d, morethan85"); 
    printf("60-84:%d, between60and84"); 
    printf("<60:%d, lessthan60"); 

} 
+0

什么问题,你到底是与您的代码有? – 2012-08-07 19:56:47

+0

我在编辑器 – user1582136 2012-08-07 20:01:48

+0

@ user1582136中强调了'for(true)'的问题,关键字'true'是C++中的,而不是C中的.C中的“True”由任何非零值表示,而C中的“false”由0表示,即 – 2012-08-07 20:07:32

回答

0

哇。很多东西在这里评论。

  1. 首先,“真”是无效C.你可以定义一个宏或常量命名为TRUE,并将其设置为“1” - 或者干脆用1

  2. 如果你是循环通过某种东西直到它破裂,使用while()而不是()。

  3. 最后,你的代码不工作的原因是因为你已经在你的printf()函数中的变量名称后面添加了引号符号。

这里是你的代码的工作版本:

#include <stdio.h> 

int main() { 
    int mark; 
    int morethan85 = 0; 
    int between60and84 = 0; 
    int lessthan60 = 0; 

    while (1) { 
     scanf("%d", &mark); 
     if (mark != 0) { 
      if (mark >= 85) 
       morethan85 ++; 
      else if (mark < 85 && mark >= 60) 
       between60and84 ++; 
      else 
       lessthan60 ++; 
     } else 
      break; 
    } 

    printf(">=85:%d\n", morethan85); 
    printf("60-84:%d\n", between60and84); 
    printf("<60:%d\n", lessthan60); 

} 
+0

不错,虽然我不会用后期增加的运算符取代'+ 1'。两者都适用于这种情况,但前/后增量运算符具有其他行为,这些行为会改变右手表达式的评估方式,并在此情况下增加了不必要的答案复杂性。在教学时,你不想做很多额外的,不相关的变化,无论多么微小,所以你不要压倒提问的人。 – 2012-08-07 20:05:55

+0

非常感谢您的回复..我是新的语言 – user1582136 2012-08-07 20:07:34

+0

'true' *是自C99以来的有效C语言。 – 2012-08-07 20:11:46

3
printf(">=85:%d, morethan85"); 
         ^

要打印普通的字符串。试试这个:

printf(">=85:%d", morethan85); 
      ^

而且,严格地说,通过更少的参数比要求的格式字符串是未定义的行为。

+0

正如我输入我的答案,你回应同样的事情。 :P +1 – 2012-08-07 19:57:00