[C语言] switch调用问题?求大神帮助小弟

[复制链接]
1165|7
 楼主| yanghelovehuang 发表于 2018-7-4 13:52 | 显示全部楼层 |阅读模式
本帖最后由 一路向北lm 于 2018-7-8 16:32 编辑

大家好 我写了一个tcp客户端,在调用函数时出现问题:
  1. main()
  2. {。。。。 //该部分为socket即填充网络结构体部分

  3. printf("please input:");

  4.         if(scanf("%d", &n) < 0)
  5.         switch(n)
  6.         {
  7.                 case 1:
  8.                         do_register(msg, sockfd);                        break;
  9.                 default:
  10.                         printf("end switch\n");
  11.         }
  12.         connect(sockfd, (struct sockaddr *)&serveraddr, addrlen);

  13. }
  14. do_register()
  15. {
  16.         msg.type = 'R';

  17.         printf("input your name:");
  18.         int n = scanf("%s", msg.name);
  19.         printf("input your passwd:");
  20.         int n = scanf("%s", msg.data);

  21. }

connect放在switch后面,调用是成功了,可是在被调函数中我打印n的值是0;两个都是0,这是为什么啊?
而且我把scanf换成fgets后第一个fgets都没阻塞直接阻塞到第二个fgets,而且打印了被赋值的msg.name为空,这又是为什么啊??
把connect提到填充网络结构体后(就是main中那部分代码的前面)。
这两个疑问 求大神帮忙解答下,谢谢。


梦幻泡影 发表于 2018-7-5 17:42 | 显示全部楼层
case执行完不用break吗
 楼主| yanghelovehuang 发表于 2018-7-6 13:32 | 显示全部楼层
梦幻泡影 发表于 2018-7-5 17:42
case执行完不用break吗

不好意思忘写了,程序里用break了
梦幻泡影 发表于 2018-7-6 14:04 | 显示全部楼层
yanghelovehuang 发表于 2018-7-6 13:32
不好意思忘写了,程序里用break了

首先,你要明白scanf();函数的用法,它的返回值表示成功录入数据项的项数,假如你输入了两个数,它就返回2,如果出错或者遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。。根据你的写法,你只是想输入一个数而已,因此,当你输入一个整数时,它会返回1,如果没有输入,它就返回0。现在来分析if(scanf("%d", &n) < 0)这句话,它为真的条件是出错了或者是遇到end of file,假如你一开机就什么都不搞,那这条判断语句就不会为真,由于switch语句是贴着if的,并且if后面没有任何符号,因此,只要if不为真,switch都不会运行。case 1是永远不会运行的,为啥?当n = 1;时,scanf()返回值是1, 1不小于0,if为假,所以不会执行switch。
 楼主| yanghelovehuang 发表于 2018-7-6 15:59 | 显示全部楼层
梦幻泡影 发表于 2018-7-6 14:04
首先,你要明白scanf();函数的用法,它的返回值表示成功录入数据项的项数,假如你输入了两个数,它就返回 ...

if后有东西的 if为假退出,我是觉得代码长所以就把步骤写出来了 细节有的没写
梦幻泡影 发表于 2018-7-6 16:49 | 显示全部楼层
yanghelovehuang 发表于 2018-7-6 15:59
if后有东西的 if为假退出,我是觉得代码长所以就把步骤写出来了 细节有的没写 ...

哪里有你这么坑的,粘代码不粘全,只搞一部分别人怎么看啊
cainiao518 发表于 2018-7-7 08:06 | 显示全部楼层
容易形成误导
 楼主| yanghelovehuang 发表于 2018-7-9 09:55 | 显示全部楼层

对不起啊 我图省事
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

324

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部