打印
[C语言]

switch调用问题?求大神帮助小弟

[复制链接]
1009|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yanghelovehuang|  楼主 | 2018-7-4 13:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 一路向北lm 于 2018-7-8 16:32 编辑

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

printf("please input:");

        if(scanf("%d", &n) < 0)
        switch(n)
        {
                case 1:
                        do_register(msg, sockfd);                        break;
                default:
                        printf("end switch\n");
        }
        connect(sockfd, (struct sockaddr *)&serveraddr, addrlen);

}
do_register()
{
        msg.type = 'R';

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

}

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。

使用特权

评论回复
5
yanghelovehuang|  楼主 | 2018-7-6 15:59 | 只看该作者
梦幻泡影 发表于 2018-7-6 14:04
首先,你要明白scanf();函数的用法,它的返回值表示成功录入数据项的项数,假如你输入了两个数,它就返回 ...

if后有东西的 if为假退出,我是觉得代码长所以就把步骤写出来了 细节有的没写

使用特权

评论回复
6
梦幻泡影| | 2018-7-6 16:49 | 只看该作者
yanghelovehuang 发表于 2018-7-6 15:59
if后有东西的 if为假退出,我是觉得代码长所以就把步骤写出来了 细节有的没写 ...

哪里有你这么坑的,粘代码不粘全,只搞一部分别人怎么看啊

使用特权

评论回复
7
cainiao518| | 2018-7-7 08:06 | 只看该作者
容易形成误导

使用特权

评论回复
8
yanghelovehuang|  楼主 | 2018-7-9 09:55 | 只看该作者

对不起啊 我图省事

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

324

帖子

1

粉丝