我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 一个小问题(c语言) 隐藏签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

独飞の孤心



性别: 帅哥 状态: 该用户目前不在线
头衔: 孽缘!
等级: 荣誉会员
家族: 单身贵族
发贴: 4484
威望: 3
浮云: 496
在线等级:
注册时间: 2005-10-12
最后登陆: 2011-09-23

5come5帮你背单词 [ witty /'witi/ a. 机智的,诙谐的,措辞巧妙的 ]


一个小问题(c语言)

#include <stdio.h>
 
test()
{
   char c;
   scanf("%c",&c);
   
   if(c=='g')
   printf("gg");
   else
   printf("e");
}  
   
void main()
{  
   char ch;
   ch=getchar();
   
   switch(ch)
   {
       case 'a':
              test();
              break;
       case 'w':
              printf("other\n");
              break;
   }
}


为什么test函数中的scanf()语句不 执行啊?如果在main()函数中没有switch分支语句的话,就可以正常执行?这个是为什么呢?

谢谢!!!


无处安放的青春II -- 该把爱放哪儿才安全

顶端 Posted: 2006-09-08 21:04 | [楼 主]
wang8664ip





性别: 帅哥 状态: 该用户目前不在线
等级: 鹤立鸡群
发贴: 1248
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-07-15
最后登陆: 2008-03-07

5come5帮你背单词 [ musical /'mju:zikəl/ a. 音乐的,悦耳的,有音乐才能的;n. 音乐喜剧,(电影)音乐片 ]


因为你输入a后 按了回车 "回车"其实也是一个字符,而且不是'g' 所以输出'e' 是执行了test();的
试试输入'ag'看   输出的应该是'gg'吧
顶端 Posted: 2006-09-08 21:54 | [1 楼]
wang8664ip





性别: 帅哥 状态: 该用户目前不在线
等级: 鹤立鸡群
发贴: 1248
威望: 0
浮云: 1105
在线等级:
注册时间: 2005-07-15
最后登陆: 2008-03-07

5come5帮你背单词 [ modest /'modist/ a. 谦虚的,客气的,适度的 ]


另外 一般'void'加在定义的函数前面
顶端 Posted: 2006-09-08 21:56 | [2 楼]
winds



性别: 保密 状态: 该用户目前不在线
头衔: sky for everywhere
等级: 前途无量
发贴: 6159
威望: 2
浮云: 1132
在线等级:
注册时间: 2004-11-28
最后登陆: 2011-09-29

5come5帮你背单词 [ crust /krΛst/ n. 外壳,地壳;干面包片 ]


Quote:
引用第1楼wang8664ip于2006-09-08 21:54发表的:
因为你输入a后 按了回车 "回车"其实也是一个字符,而且不是'g' 所以输出'e' 是执行了test();的
试试输入'ag'看   输出的应该是'gg'吧

就是就是,你按了a后已经进入了TEST(),不要按回车
那时按g是c的了...
用这个就可以看到a +按回车的e 了
Copy code
#include <stdio.h>
void test()
{
  char c;
  scanf("%c",&c);

 
  if(c=='g')
  {printf("gg");
}

  else
  {printf("e");
  getch();}

}  
 
void main()
{  
  char ch;
  ch=getchar();
 
  switch(ch)
  {
    case 'a':
        test();
        break;
    case 'w':
        printf("other\n");
        break;
    default : break;
  }
}




顶端 Posted: 2006-09-08 22:11 | [3 楼]
dream46



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 438
威望: 0
浮云: 1111
在线等级:
注册时间: 2005-11-13
最后登陆: 2011-04-07

5come5帮你背单词 [ interface /'intə(:)feis/ n. 界面 ]


楼上好像是对的
加个 void 就行了
顶端 Posted: 2006-09-08 22:12 | [4 楼]
独飞の孤心



性别: 帅哥 状态: 该用户目前不在线
头衔: 孽缘!
等级: 荣誉会员
家族: 单身贵族
发贴: 4484
威望: 3
浮云: 496
在线等级:
注册时间: 2005-10-12
最后登陆: 2011-09-23

5come5帮你背单词 [ roast /rəust/ v. & n. 烘烤 ]




谢谢了


无处安放的青春II -- 该把爱放哪儿才安全

顶端 Posted: 2006-09-08 22:13 | [5 楼]
winds



性别: 保密 状态: 该用户目前不在线
头衔: sky for everywhere
等级: 前途无量
发贴: 6159
威望: 2
浮云: 1132
在线等级:
注册时间: 2004-11-28
最后登陆: 2011-09-29

5come5帮你背单词 [ oil /oil/ n. 油,石油;vt. 给…加油 ]


这样就完美了
Copy code
#include <stdio.h>

void test()
{
  char c;
  scanf("%c",&c);

 
  if(c=='g')
  {printf("gg");
  getch();
}

  else
  {printf("e");
  getch();}

}  
 
void main()
{  
  char ch;
  scanf("%c\n",&ch);
 
  switch(ch)
  {
    case 'a':
        test();
        break;
    case 'w':
        printf("other\n");
        break;
    default : break;
  }
}



顶端 Posted: 2006-09-08 22:14 | [6 楼]
winds



性别: 保密 状态: 该用户目前不在线
头衔: sky for everywhere
等级: 前途无量
发贴: 6159
威望: 2
浮云: 1132
在线等级:
注册时间: 2004-11-28
最后登陆: 2011-09-29

5come5帮你背单词 [ regardless /ri'ga:dlis/ ad. 不管后果;a. 不留心的,不注意的 ]


Quote:
引用第4楼dream46于2006-09-08 22:12发表的:
楼上好像是对的
加个 void 就行了

不是加void的问题



顶端 Posted: 2006-09-08 22:14 | [7 楼]
独飞の孤心



性别: 帅哥 状态: 该用户目前不在线
头衔: 孽缘!
等级: 荣誉会员
家族: 单身贵族
发贴: 4484
威望: 3
浮云: 496
在线等级:
注册时间: 2005-10-12
最后登陆: 2011-09-23

5come5帮你背单词 [ lunch /lΛnt/ n. 午餐,便饭 ]


Quote:
引用第4楼dream46于2006-09-08 22:12发表的:
楼上好像是对的
加个 void 就行了

不是void的问题哈

1楼蝈蝈的是正解

在scanf前面加一个getchar就可以了


无处安放的青春II -- 该把爱放哪儿才安全

顶端 Posted: 2006-09-08 22:17 | [8 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.013665(s) query 7, Time now is:05-29 04:11, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号