51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3507|回复: 7
打印 上一主题 下一主题

[讨论] 请教各位一题C语言题目,请大家帮帮忙

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-9-7 20:54:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位下面这个程序,
do while 语句一直不对,char型换成int 型却可以,请问各位是怎么回事?
#include "stdafx.h"
#include  "stdio.h"
void main()
{
float x;
char a='y';
do
{
     printf("Input the mark:\n");
     scanf("%f",&x);
     printf("mark=%3f\n", x);

     if (x>=0 && x<=100)
        if (x>=85)
           printf("成绩优秀\n");
        else
        {
          if (x>=60)
             printf("成绩良好\n");
          else
             printf("不及格\n");

        }
    else
    printf("输入错误\n");

    printf("是否继续查询?是,请输入y;否,输入其他任何字符\n");
    scanf("%c", &a);
}
while(a=='y');       
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-9-8 10:11:23 | 只看该作者
除了开始的时候  没看懂为什么  给a直接赋值 y以外   其他的看不出错

所以要请高手来回答了..

[ 本帖最后由 zhanglu_8207 于 2008-9-8 10:15 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2008-9-8 13:39:45 | 只看该作者
貌似    printf("Input the mark:\n");
     scanf("%f",&x);
     printf("mark=%3f\n", x);

     if (x>=0 && x<=100)
        if (x>=85)
           printf("成绩优秀\n");
这段应该加对括号
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2008-9-8 16:10:39 | 只看该作者
scanf("%c", &a);
我记得这么用会出问题的
单个字符的输入最好避免用scanf
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2008-9-9 01:55:34 | 只看该作者
scanf("%f",&x);



scanf("%c", &a);这句不能正常接收字符
你可以用printf("a=%d\n",a);将a里面的数值显示出来看到底a读取什么字符,结果是 a=10 ,ASCII值为10是什么?换行即\n.
当你执行第一个语句scanf,输入x回车后,x和换行符留在缓冲区中。第一个scanf只读取了x,但是输入缓冲区里面还留有一个\n,因此第二个scanf读取这个\n,这个语句即使你使用getchar()也不能解决问题,读取的还是这个换行符,这属于键盘缓冲区残余信息问题,在使用第二个scanf之前,你必须清空它。
如果换成读取数据当然就不存在这个问题了。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2008-9-9 03:48:04 | 只看该作者
一个很基本的问题
CHAR型不能用SANF
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2008-9-9 04:11:38 | 只看该作者

回复 1# 的帖子

#include "conio.h"
#include  "stdio.h"
void main()
{
float x;
//char a;
do
{
     printf("Input the mark:\n");
     scanf("%f",&x);
     printf("mark=%3f\n", x);

     if (x>=0 && x<=100)
        if (x>=85)
           printf("成绩优秀\n");
        else
        {
          if (x>=60)
             printf("成绩良好\n");
          else
             printf("不及格\n");

        }
    else
    printf("输入错误\n");

    printf("是否继续查询?是,请输入y;否,输入其他任何字符\n");
   
}
while(getch()=='y'||'Y');        
}
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2008-10-9 20:52:37 | 只看该作者

回复 6# 的帖子

高手,高手。受教了
我是新手,有时候真觉得计算机的脑子是个怪胎。
字母和数字我眼里都是抽象符号,怎么在计算机里就差别那么大呢?
难理解。。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-24 17:25 , Processed in 0.082497 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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