| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2306 人关注过本帖
标题:scanf命令什么时候失效?
只看楼主 加入收藏
hu289363109
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-4-15
收藏
 问题点数:0 回复次数:11 
scanf命令什么时候失效?
main()
{char choice;
 loop:
 printf("\nwhat do u want:\nc for creat    i for insert    d for del     q    for  exit \n");
 scanf("%c",&choice);
  switch(choice)
  {case 'c':
     printf("================creat=======================\n");
     break;
   case 'i':
     printf("================input========================\n");
     break;
   case 'd':
     printf("================del==========================\n");
     break;
   case 'q':
     exit(0);
   default:
     printf("================error========================\n");
  }
    goto loop;
 }
  运行的时候,总是多了两行
nwhat do u want:\nc for creat    i for insert    d for del     q    for  exit
================error========================


??????????????????????????

20081114185012687.png (34.73 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: scanf 命令 失效 
2008-11-14 18:53
hu289363109
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-4-15
收藏
得分:0 
谁能够给我解答一下吗
2008-11-14 18:57
lno
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-11-14
收藏
得分:0 
不知道啊
2008-11-14 19:00
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
char except space char - will read immediately
%c - same as char
other format controler - will ignore all space char readed before reading data
space char - will ignore all space char readed

e.g.
"%c"   get a char immediately
" %c"  ignore any space char, then read next non-space char
"%d"  ignore any space char, then read a integer number
"apple %c" read "apple", and ignore any space char, then read next non-space char

that's all.
2008-11-14 19:02
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char choice;
    loop:
    printf("\nwhat do u want:\nc for creat    i for insert    d for del     q    for  exit \n");
    scanf("%s",&choice);
    switch(choice)
    {case 'c':
        printf("================creat=======================\n");
        break;
    case 'i':
        printf("================input========================\n");
        break;
    case 'd':
        printf("================del==========================\n");
        break;
    case 'q':
        exit(0);
    default:
        printf("================error========================\n");
    }
    goto loop;

    system("PAUSE");
    return 0;
}

char 的宽度为一个字符.而当你运行程序输入c时然后就按回车,因此scanf读入的是c这个字符,但是回车字符会当作下一次的输入.所以就会出现这种情况.

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-11-14 19:21
网易
Rank: 1
来 自:金星
等 级:禁止访问
帖 子:193
专家分:0
注 册:2008-6-10
收藏
得分:0 
int main(int argc, char *argv[])

有事无事都写上他  不烦吗?

答案是:雨中飞燕!
2008-11-14 19:24
hu289363109
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-4-15
收藏
得分:0 
问题已经解决了
在c语言中使用scanf()函数在键盘上接受字符型数据时,必须用fflush(stdin)这个来清楚上一次存储的数据,不然字符型数据不会正确的存储.
fflush()在库中 stdio.h
清除缓冲区中的内容
程序如下:
#include "stdio.h"
main()
{char choice;
 loop:
 printf("\nwhat do u want:\nc for creat    i for insert    d for del     q    for  exit \n");
 fflush(stdin);
 scanf("%c",&choice);
  switch(choice)
  {case 'c':
     printf("================creat=======================\n");
     break;
   case 'i':
     printf("================input========================\n");
     break;
   case 'd':
     printf("================del==========================\n");
     break;
   case 'q':
     exit(0);
   default:
     printf("================error========================\n");
  }
    goto loop;
 }

20081114191052609.png (12.08 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2008-11-14 19:24
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
[bo][un]网易[/un] 在 2008-11-14 19:24 的发言:[/bo]

int main(int argc, char *argv[])

有事无事都写上他  不烦吗?

不是有事无事...而是ide生成的.
所以就由其了...

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-11-14 19:26
hu289363109
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-4-15
收藏
得分:0 
谢谢各位哈
2008-11-14 19:28
hu289363109
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-4-15
收藏
得分:0 
ioriliao 能给我讲讲你的程序中德system("PAUSE")吗
system("PAUSE")
这个语句在goto loop之后的啊
怎么会执行到那里呢
那句话又有什么作用呢
我运行了的.是可以的

20081114193211656.png (1.79 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2008-11-14 19:35
快速回复:scanf命令什么时候失效?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020166 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved