您的位置:

c语言结构中填充字段问题,矩阵填充问题c语言

本文目录一览:

C语言结构体成员变量的中字符串型数值型在一个scanf函数里输入的问题

//修改了一点,注意看说明 

#include stdio.h 

#include stdlib.h

struct stu

{

char name[10];

int num;

int age;

char addr[15];

}sa[3],sb[3],*pp,*qq; //创建结构体类型struct stu的同时,定义结构体数组sa、sb,定义结构体指针变量 pp、qq。 

int main()

{

FILE *fp;

char ch;

int i;

if((fp=fopen("D:\\学习\\C语言源码\\devC++\\第13章 文件\\stu_list.txt","w"))==NULL) //以只写的方式打开文件 ,没有该文件的情况下会创建该文件 

{

printf("Cannot open file,press any key to exit");

getchar();

exit(0);

}

printf("input data\n");

pp=sa;

for(i=0;i3;i++,pp++)

{

scanf("%s%d%d%s",pp-name,pp-num,pp-age,pp-addr); //先用scanf给结构体的成员变量赋值 

//在下在这句多加几个空格,作为输入数据的分隔符,注意输入的人名和地址中应该没有空格,不然会出错 

//或者文件的输入和输出全部指定宽度 

fprintf(fp,"%s %d %d %s\n",pp-name,pp-num,pp-age,pp-addr); //然后用fprintf将结构体成员变量的值写入fp所指向的文件stu_list.txt中去 

}

fclose(fp); //完成写入文件操作后,关闭文件,使指针fp不再指向该文件 

fp=fopen("D:\\学习\\C语言源码\\devC++\\第13章 文件\\stu_list.txt","r"); //以只读的方式打开文件 

qq=sb;

printf("name\tnumber age addr\n");

for(i=0;i3;i++,qq++)

{

fscanf(fp,"%s%d%d%s",qq-name,qq-num,qq-age,qq-addr); //先用fscanf将fp所指向的文件stu_list.txt中的值读取到结构体成员变量中 

printf("%s\t%5d%3d%s\n",qq-name,qq-num,qq-age,qq-addr); //然后用printf输出结构体变量的值 

}

fclose(fp); //完成读取文件操作后,关闭文件,使指针fp不再指向该文件 

}

C语言结构体赋值的问题,刚输入第一个name就提示出错

这里有两个问题需要注意:首先是stu.name是数组,因此赋值时不必再取地址,因为数组名就是首地址;同样,stu.sex,stu.age,stu.score是变量,所以需要去地址;因此代码应该为:

PR("name?");scanf("%s",stu.name);

PR("sex?");scanf("%c",stu.sex);

PR("age?");scanf("%d",stu.age);

PR("score?");scanf("%f",stu.score);

但这时候编译执行,你会发现输入完name以后,没有让你输入sex,便直接让输入age了,这个问题原因为:

scanf是从标准输入缓冲区中读取输入的数据,而%c的字符输入格式会接收回车字符,在输入第一个scanf时输入一串字符后按 回车结束,输入缓冲中保存了这个回车符,遇到第二个scanf时,它自动把这个回车符赋给了ch2。所以相当于已经执行了scanf("%c",stu.sex);输入的值是回车;而如果第二个scanf的输入格式不是%c时,由于格 式不匹配,这个回车符会被自动忽略;

解决办法:

1。清空输入缓冲区

第一个scanf后加入清空输入缓冲区函数:fflush(stdin);

代码变为:

PR("name?\n"); scanf("%s",stu.name);fflush(stdin);

PR("sex?\n"); scanf("%c",stu.sex);

PR("age?\n"); scanf("%d",stu.age);

PR("score?\n"); scanf("%f",stu.score);

2。格式控制中加入空格

将第二个scanf改为:scanf(" %c",stu.age);//在%号前面加一个空格,此时由于与回车不匹配秒就把回车忽略了

代码变为:

PR("name?\n"); scanf("%s",stu.name);

PR("sex?\n"); scanf(" %c",stu.sex);

PR("age?\n"); scanf("%d",stu.age);

PR("score?\n"); scanf("%f",stu.score);

此时便可得到你想要的结果。

请问在C语言中怎样对结构体中的字符串进行赋值?

bbb,cccc" ;

string[] sArray=a.Split(",");

对应的sArray[0]就存放着aaaa

sArray[1]就存放着bbbb

依此类推

然后就是根据你的要求对结构体赋值

首先要先定义一个结构体kk

kk.te=sArray[0];

类似这样的赋值就可以了

C语言,结构体问题?所占内在字节数,怎么算的???

在c语言中如何计算结构体长度和共用体长度?

结构体的长度等于体内各个成员变量长度之后。如此题长度为字符串数组的长度加上两个int型变量的长度,再加上double长度,最后结果为10+2+2+8=22。解析:char 每个字符占一个字节(因为是一个十长度的字符数组)所以是10字节,int占两个字节,double占8个字节。所以最后是10+2*2+8=22。

共用体的长度是体内成员中最长的长度。如果一个共用体内最长长度为12字节,则共用体的长度就是12。

希望能够帮到你。如果还有什么问题在问?

c语言位操作的位字段填充

单片机分8bit\16bit\32bit的数据宽度,这与硬件设计有关,我们在访问数据时,如过存储宽度是8bit的MCU,那么上图中 ,opaque 、fill_color、和第三行的缺省定义占了8bit,存储为1个有效的最小单元,后面的 show_border、bordrr_coler、border_style和后面的2bit缺省为一个8bit最小存储单元。这样做的目的是在访问这这结构体成员的的时候,可以快速的存取这些变量;如果不要缺省的第三行和第8行,读取数据时,需要移位的变量就会比较多,这样浪费MCU的时间资源;