佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1101|回复: 24

C 语言..

[复制链接]
发表于 16-2-2006 01:38 AM | 显示全部楼层 |阅读模式
这个有问题吗?为什么有3个WARNING的?
90-100 = GRADE A
80-89 = GRADE B
70-79 = GRADE C
60-69 = GRADE D
<60 = GRADE F

#include <stdio.h>

void main()
{
        int grading;
        char grade;

        printf("Enter your grading(0-100 only): ");
        scanf("%i", &grading);
        if(grading > 90)
        {printf("A!\n");
        }
        else
        {if(grading >80)
                        printf("B!\n");
                else
                {if(grading >70)
                                printf("C!\n");
                }
                        else
                        {if(grading >60)
                                        printf("D!\n");
                        }
                                else
                                {if(grading <60)
                                                printf("F!\n");
                                }
                                printf("grading %i", grade);
}
回复

使用道具 举报


ADVERTISEMENT

发表于 16-2-2006 06:46 AM | 显示全部楼层
//90-100 = GRADE A
//80-89 = GRADE B
//70-79 = GRADE C
//60-69 = GRADE D
//<60 = GRADE F

#include <stdio.h>

void main()
{
        int grading;


        printf("Enter your grading(0-100 only): ");
        scanf("%i", &grading);
        if(grading >= 90)
                        printf("A!\n");
        else if(grading >=80)
                        printf("B!\n");
        else if(grading >=70)
            printf("C!\n");
        else if(grading >=60)
            printf("D!\n");
        else if(grading <60)
            printf("F!\n");
                else
                        printf("Invalid Input\n");
       
}

这样应该就没有问题了,不用declera 多一个variable , 因为你是print 出来而已...
syntax是这样,
if
else if
else

[ 本帖最后由 evo9 于 16-2-2006 06:48 AM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 16-2-2006 07:08 AM | 显示全部楼层
原帖由 evo9 于 16-2-2006 06:46 AM 发表
//90-100 = GRADE A
//80-89 = GRADE B
//70-79 = GRADE C
//60-69 = GRADE D
//<60 = GRADE F

#include <stdio.h>

void main()
{
        int grading;


        printf("Enter y ...

谢谢..我是C语言新手^_^
刚刚第二堂课..
回复

使用道具 举报

发表于 16-2-2006 04:31 PM | 显示全部楼层
原帖由 FieryMan 于 16-2-2006 07:08 AM 发表

谢谢..我是C语言新手^_^
刚刚第二堂课..


不客气,我也是新手而已...
回复

使用道具 举报

发表于 17-2-2006 03:33 AM | 显示全部楼层
新手和新手一起讨论,很好玩咧。
我觉得 evo9 最后的那个 else 是不必要的。
因为照着你的逻辑来看,最后那个 printf("Invalid input"); ,
是永远都不会被执行的。
所以我改了一点。嘻嘻。


#include <stdio.h>

void main()
{
        int mark;
        char grade;

        printf("Enter mark (0 - 100): ");
        scanf("%i", &mark);

        if (mark >= 80)
                grade = 'A';
        else if (mark >= 60)
                grade = 'B';
        else if (mark >= 40)
                grade = 'C';
        else
                grade = 'F';

        printf("Your grade is %c\n", grade);
}


Programming 好玩的地方就是有很多不同的 solutions。
大家新手交流交流一下。Nice to meet you both 哟。

如果要 track invalid input 的话,又不要用 loop,
我就把它改成下面的 code:


#include <stdio.h>

void main()
{
        int mark;
        char grade;

        printf("Enter mark (0 - 100): ");
        scanf("%i", &mark);

        // checking for grade...

        if (mark < 0 || mark > 100) // invalid case...
                grade = 'X';
        else if (mark >= 80)
                grade = 'A';
        else if (mark >= 60)
                grade = 'B';
        else if (mark >= 40)
                grade = 'C';
        else
                grade = 'F';

        // displaying grade...

        if (grade != 'X')
                printf("Your grade is %c\n", grade);
        else
                printf("Invalid input\n");
}


[ 本帖最后由 liawcv 于 24-2-2006 01:53 PM 编辑 ]
回复

使用道具 举报

发表于 17-2-2006 03:46 AM | 显示全部楼层
原帖由 evo9 于 16-2-2006 06:46 AM 发表
//90-100 = GRADE A
//80-89 = GRADE B
//70-79 = GRADE C
//60-69 = GRADE D
//<60 = GRADE F

#include <stdio.h>

void main()
{
        int grading;


        printf("Enter y ...

101分的话应该怎么样?



原帖由 liawcv 于 17-2-2006 03:33 AM 发表
新手和新手一起讨论,很好玩咧。
我觉得 evo9 最后的那个 else 是不必要的。
因为照着你的逻辑来看,最后那个 printf("Invalid input"); ,
是永远都不会被执行的。
所以我改了一点。嘻嘻。 ...

0分是哪个等级?

可以的话, 在下认为, main()最好不要用void。
回复

使用道具 举报

Follow Us
发表于 17-2-2006 09:02 AM | 显示全部楼层
不用void用什么??
学校都教int main(void)..
回复

使用道具 举报

发表于 17-2-2006 12:51 PM | 显示全部楼层
原帖由 Juzleave 于 17-2-2006 09:02 AM 发表
不用void用什么??
学校都教int main(void)..

你都讲是int了
回复

使用道具 举报


ADVERTISEMENT

发表于 17-2-2006 01:20 PM | 显示全部楼层
-100 分的话应该怎么样?

如果他type英文字母的话应该怎么样?
如“abc”
回复

使用道具 举报

发表于 18-2-2006 10:29 AM | 显示全部楼层
这个就高级一点。
当你scan时,check scanf return 什么value。
Example:

int check;
int input;
char temp[10];

   printf("Enter an integer>> ");
   do
   {
       check=scanf("%d",&input);
       if(check!=1)
           scanf("%s",temp);
    }while(check!=1)

好像是这样。。。
还没compile。
回复

使用道具 举报

发表于 24-2-2006 01:46 PM | 显示全部楼层
零分的等级是 F 啰。嘻嘻。
不过如果是用户打进 character 怎样办?
上一帖的逻辑很不错啊。
scanf() 在执行后会 return 一个数值的。
而这个数值会表示有多少个 conversion 是成功的。
因为我们的 scanf() 只有一个 place holder (%d),
所以成功转换的话,return 的数值是 1,如果不成功,就是 0。
所以上一帖是以测试这个数值来辨别用户打进的 input 是 character 与否。

不过,因为我已经写了自己的 source code 了。
所以用一个比较取巧的方式。
如果 scanf() 的  conversion 是不成功的,
那 variable 的原本数值就会保持。

所以,只要把 mark 在一开始的时候就设成不正确的数值,如 -1,
如果用户打进的 input 是 character 的话,
mark 的数值就不会改变,就还是 -1 啰。
所以,还会是 invalid 的。


#include <stdio.h>

void main()
{
        int mark = -1;
        char grade;

        printf("Enter mark (0 - 100): ");
        scanf("%i", &mark);

        // checking for grade...

        if (mark < 0 || mark > 100) // invalid case...
                grade = 'X';
        else if (mark >= 80)
                grade = 'A';
        else if (mark >= 60)
                grade = 'B';
        else if (mark >= 40)
                grade = 'C';
        else
                grade = 'F';

        // displaying grade...

        if (grade != 'X')
                printf("Your grade is %c\n", grade);
        else
                printf("Invalid input\n");
}


不过因为 scanf() 不成功,
所以打进的 character 会留在 input buffer 里面,
如果以后会用到 scanf() 的话,
就要 clear 掉 input buffer 里面的东西了。
用 fflush(stdin) 来 clear 掉啰。

为什么 main() 要 return int 比较好呢?
我通常都是用 void 的,所以不是很清楚咧。
因为我觉得其他的 program 或 operating system,
不需要用到这个 main() 的 return 数值。
不过,void 比较好,还是 int 比较好,我就不懂了。哈哈哈。

[ 本帖最后由 liawcv 于 24-2-2006 02:14 PM 编辑 ]
回复

使用道具 举报

发表于 24-2-2006 03:17 PM | 显示全部楼层
原帖由 liawcv 于 24-2-2006 01:46 PM 发表
不过因为 scanf() 不成功,
所以打进的 character 会留在 input buffer 里面,
如果以后会用到 scanf() 的话,
就要 clear 掉 input buffer 里面的东西了。
用 fflush(stdin) 来 clear 掉啰。



fflush怎么用?
我都是用多一个scanf("%s",&string);来解决滴。

回复

使用道具 举报

发表于 25-2-2006 01:43 PM | 显示全部楼层
fflush(stdin); 的目的和你用的方法一样。
是要清除留在 input buffer 的 characters。
如果不清除的话,下一个 scanf() 可能会出问题啰。
stdin 是 system declare 的 file pointer。
全意是 standard input,就是 input buffer 啰。
好处是比较直接,不需要另外 declare 一个 string-type variable。
而且也不用另外用一个 scanf() 来把 input buffer 清除掉。

你应该会懂以下程序的问题吧。
在用户打进 integer 后,第一个 scanf() 会把号码都读掉,
可是 enter (newline character) 却还是会留在 input buffer 里面,
所以在第二个 scanf() 执行的时候,
程序就会把留在 input buffer 里面的 newline character 读掉,
用户根本没有机会打进 character。


#include <stdio.h>

void main()
{
        int x;
        char y;

        printf("Enter integer: ");
        scanf("%d", &x);
       
        printf("Enter character: ");
        scanf("%c", &y);

        printf("Integer = %d, character = %c\n", x, y);
}


解决的方法可以在第二个 scanf() 的 %c 前面加一个 space。如下:

        printf("Enter character: ");
        scanf(" %c", &y);

这样的话,程序就会 ignore 所有的 white space characters,
一直到在 input buffer 里面找到下一个 non-white space character 为止,
或,如果 input buffer 里面没有东西了,程序才会等用户打进新的 character。
所以,这个方法并没有把 input buffer 清除。
如果用户在 "Enter integer" 的时候,打进以下的字串的话:

100 a

第二个 scanf() 是会直接读取留在 input buffer 里面的 "a" 的。

可是,如果是用 scanf("%s", temp) 的方法,还是有一点问题。
比如说下面的程序,在打进 integer 以后,程序就会执行 scanf("%s", temp)。
可是 scanf("%s", temp) 也是不会把 newline character 读取的,
所以读 character 的那个 scanf() 也是不会成功。


#include <stdio.h>

void main()
{
        int x;
        char y;
        char temp[10];

        printf("Enter integer: ");
        scanf("%d", &x);

        scanf("%s", temp);
       
        printf("Enter character: ");
        scanf("%c", &y);

        printf("Integer = %d, character = %c\n", x, y);
}


如果还是要用 temporary string 的方法把问题解决的话,可以用 gets()。
gets() 会读掉 input buffer 里面的 newline character。
如果用户打进的字串长度大于 temporary string 的长度的话,
程序就很可能会有 runtime error 了。Memory overflow 的问题。


#include <stdio.h>

void main()
{
        int x;
        char y;
        char temp[10];

        printf("Enter integer: ");
        scanf("%d", &x);

        gets(temp);
       
        printf("Enter character: ");
        scanf("%c", &y);

        printf("Integer = %d, character = %c\n", x, y);
}


所以,最简单的和最干净的方法,还是用 fflush()。如下:


#include <stdio.h>

void main()
{
        int x;
        char y;

        printf("Enter integer: ");
        scanf("%d", &x);

        fflush(stdin);
       
        printf("Enter character: ");
        scanf("%c", &y);

        printf("Integer = %d, character = %c\n", x, y);
}
回复

使用道具 举报

发表于 25-2-2006 02:23 PM | 显示全部楼层
原帖由 liawcv 于 24-2-2006 01:46 PM 发表
零分的等级是 F 啰。嘻嘻。
不过如果是用户打进 character 怎样办?
上一帖的逻辑很不错啊。
scanf() 在执行后会 return 一个数值的。
而这个数值会表示有多少个 conversion 是成功的。
因为我们的 scanf()  ...

如果你有用过dos command, 有一个叫errorlevel的指令。你可以用return一个integer的value去errorlevel。当你有用到dos的batchfile时, errorlevel是一个很有用的指令。
main用void有什么坏处在下不清楚,在下很少在main用void的declaration。在下写一个function很少没有return    value的。
回复

使用道具 举报

发表于 25-2-2006 10:33 PM | 显示全部楼层
原帖由 liawcv 于 25-2-2006 01:43 PM 发表
fflush(stdin); 的目的和你用的方法一样。
是要清除留在 input buffer 的 characters。
如果不清除的话,下一个 scanf() 可能会出问题啰。
stdin 是 system declare 的 file pointer。
全意是 standard input ...



谢谢你。
我学到东西鸟。


如果用户在 "Enter integer" 的时候,打进以下的字串的话:

100 a

第二个 scanf() 是会直接读取留在 input buffer 里面的 "a" 的。



这个问题我是解决不到滴。
现在会鸟。

回复

使用道具 举报

发表于 25-2-2006 10:35 PM | 显示全部楼层
原帖由 糯米鸡 于 25-2-2006 02:23 PM 发表
如果你有用过dos command, 有一个叫errorlevel的指令。你可以用return一个integer的value去errorlevel。当你有用到dos的batchfile时, errorlevel是一个很有用的指令。
main用void有什么坏处在下不清楚,在 ...



可以解释关于errorlevel吗?
我对dos command地认识还很浅。
但我还是很好奇。
可以给些sample code吗?

回复

使用道具 举报


ADVERTISEMENT

发表于 13-3-2006 12:41 AM | 显示全部楼层

我也是新手

但是我没什么上课,基础很差

现在想问各位
我的是要在输入你的选择过后,就清除原本的menu,要怎样清除?
回复

使用道具 举报

发表于 13-3-2006 01:04 PM | 显示全部楼层
。。。。。。
没有人会???
回复

使用道具 举报

发表于 13-3-2006 07:11 PM | 显示全部楼层
原帖由 FieryMan 于 16-2-2006 01:38 AM 发表
#include <stdio.h>

void main()
{
        int grading;
        char grade;

        printf("Enter your grading(0-100 only): ");
        scanf("%i", &grading);
        if(grading > 90)
        {printf("A!\n");
        }
        else
        {if(grading >80)
                        printf("B!\n");
                else
                {if(grading >70)
                                printf("C!\n");
                }
                        else
                        {if(grading >60)
                                        printf("D!\n");
                        }
                                else
                                {if(grading <60)
                                                printf("F!\n");
                                }
                                printf("grading %i", grade);
}



这样的写法有一些问题:

1。当用户打入91时,grading = 91。而grading = 91符合了你以上所有的condition,(grading < 60)除外,因为 91 > 90 > 80 > 70 > 60

2。当用户输入超过100时,output依然是"A",而这已经不符合题目的要求了。

这样说能够明白吗?



所以我觉得可以这样写:

if (grading >= 90 && grading <= 100)

依此类推。


希望我的论点是正确的,欢迎讨论。
回复

使用道具 举报

发表于 13-3-2006 07:40 PM | 显示全部楼层
Apiit的也过来了
呵呵
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 22-9-2024 04:11 AM , Processed in 0.137009 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表