scanf("%s",&person[i].job)与scanf("%s",person[i].job)的区别

// 请对比以下两个程序段,认真分析其因

#include 
< stdio.h >
#include 
< string .h >
struct  score
{
    
char job[10];
    union
    
{
        
int classes;
        
char group[20];
    }
category;
}
person[ 2 ];

void  main()
{
    
int i;    
    
for(i=0;i<2;i++)
    
{        
        scanf(
"%s",person[i].job);//结构体变量person是数组,因此必须以%s作输入格式符,又因其成员job也是字符数组,所以输入项前不必加取地址运算符&
        if(strcmp(person[i].job,"s")==0)        
            scanf(
"%d",&person[i].category.classes);        
        
else if(strcmp(person[i].job,"t")==0)
            scanf(
"%s",person[i].category.group);//结构体变量person是数组,因此必须以%s作输入格式符,又因其成员group又是共用体变量category中的字符数组,所以输入项前不必加取地址运算符&    
        else
            printf(
"input error!");
    }

    
for(i=0;i<2;i++)
    
{
        
if(strcmp(person[i].job,"s")==0)
            printf(
"%d,",person[i].category.classes);
        
else
            printf(
"%s",person[i].category.group);
    }

}



// 程序段二:
#include  < stdio.h >
#include 
< string .h >
struct  score
{
    
char job;
    union
    
{
        
int classes;
        
char group[20];
    }
category;
}
person[ 2 ];

void  main()
{
    
int i;    
    
for(i=0;i<2;i++)
    
{        
        scanf(
"%s",&person[i].job);//因为结构体变量person是数组,所以必须用%s作格式符,又因为其成员仅是字符型变量而非数组,所以应该加上取地址运算符&.(注意:此语句并不茅盾)
        if(person[i].job=='s')        
            scanf(
"%d",&person[i].category.classes);        
        
else if(person[i].job=='t')
            scanf(
"%s",person[i].category.group);//必须用%s作格式符,但不能加取地址运算符&.因为结构体变量person是数组,而其成员group是共用体category变量中的字符数组    
        else
            printf(
"input error!");
    }

    
for(i=0;i<2;i++)
    
{
        
if(person[i].job=='s')    
            printf(
"%d,",person[i].category.classes);
        
else
            printf(
"%s",person[i].category.group);
    }

}

 

scanf("%s",&person[i].job);//如果person是数组,job是字符变量则此语句不茅盾,且输入时必须用%s作格式符,并要加上取地址运算符&

scanf("%s",person[i].job);//如果person和job都是数组,且job为字符数组,只输入是不需要取地址运算符&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值