C语言中怎么给一个结构体用scanf进行赋值?

结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存。

举例:编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数

#include <stdio.h>

#include <stdlib.h>

struct student  //建立结构体,学号,姓名,3门课的分数

{

int num;

char name[10];

int score[3];

}Stu[5];          //初始化,一共5个学生的数据

void getScore(struct student * p)  //函数:向结构体读取分数,一共三门课

{

int i, j;

for (i = 0; i < 5; i++)

for (j = 0; j < 3; j++)

scanf_s("%d", (&(p+i)->score[j]));

}

void getNum(struct student * p)  //函数:向结构体读取学号

{

int i;

for (i = 0; i < 5;i++)

scanf_s("%d", &(p + i)->num);

}

void getName(struct student * p)  //函数:向结构体读取姓名

{

int i;

for (i = 0; i < 5; i++)

scanf("%s", &(p + i)->name);

}

int main()

{

int i, j, average[3] = { 0 };   //average数组储存每门课的平均分

getNum(Stu);            //函数调用

getName(Stu);

getScore(Stu);

for (j = 0; j < 3; j++)

{

for (i = 0; i < 5; i++)

average[j] += Stu[i].score[j];

}

for (i = 0; i < 5; i++)

{

printf("num = %d name = %s Score:", Stu[i].num, Stu[i].name);  //依次打印学号 姓名

//printf("%d %d %d", Stu[0].score[0],Stu[0].score[1],Stu[0].score[2]);

for (j = 0; j < 3; j++)    //打印三门课的分数

printf(" %d", Stu[i].score[j]);

printf("
");

}

printf("average:");

for (i = 0; i < 3; i++)

printf("%f ", (float)average[i]/5);   //打印三门课平均分

printf("
");

system("pause");

return 0;

}

如:

scanf("%c%c%c",&a,&b,&c);

输入为:

d e f

则把'd'赋予a, ' '(空格)赋予b,'e'赋予c。因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把' '作为下一个字符送给b。

只有当输入为:def(字符间无空格) 时,才能把'd'赋于a,'e'赋予b,'f'赋予c。

扩展资料:

1、函数原型

int scanf(const char * restrict format,...);

函数 scanf() 是从标准输入流stdin [1]  (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。

函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。

2、返回值

scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。如:

scanf("%d %d",&a,&b);函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;

如果只有a被成功读入,返回值为1;如果a和b都未被成功读入,返回值为0;如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。

例:使用scanf函数输入数据。

#include <stdio.h>

int main(void)

{

int a,b,c;

printf("Give me the value of a,b,c seperated with whitespaces:
");

scanf("%d%d%d",&a,&b,&c);

printf("a=%d,b=%d,c=%d
",a,b,c);

return 0;

}

注意:&a,&b,&c中的&是寻址操作符,&a表示对象a在内存中的地址,是一个右值。变量a,b,c的地址是在编译阶段分配的(存储顺序由编译器决定)。

如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以用逗号分隔,只能用空白字符(空格或tab键或者回车键)分隔——“2 (空格)3(tab) 4” 或 “2(tab)3(回车)4”等。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”。

参考资料:

百度百科——scanf(计算机语言函数)



  • C璇█涓 濡備綍寤虹珛涓涓鍌ㄥ瓨鏁版嵁鐨勬枃浠
    绛旓細struct School /* 瀛︽牎缁撴瀯浣 */ { int scnum; //瀛︽牎搴忓彿 int team; //鍥㈤槦鎬诲垎 int mteam; //鐢峰瓙鍥㈤槦鎬诲垎 int fteam; //濂冲瓙鍥㈤槦鎬诲垎 };//瀛樺偍鏍煎紡锛氱粨鏋勪綋 struct School sc[20]; //瀛︽牎缁撴瀯浣擄紝鏈澶20涓鏍 void fileinput(void)//鏂囦欢瀵煎叆 { FILE *fp;int i;if((fp=...
  • 瀛︾敓淇℃伅绠$悊绯荤粺鏈绠鍗曟簮浠g爜銆
    绛旓細鏂规硶涓锛1銆佸垱寤涓涓猚璇█椤圭洰銆傜劧鍚庡彸閿ご鏂囦欢锛屽垱寤轰竴涓猄tu鐨勫ご鏂囦欢銆2銆佺劧鍚庣紪鍐欏ご鏂囦欢鐨勪唬鐮併傚啀灏嗘暟鎹粨鏋勭殑澧炲垹鏀规煡鍜缁撴瀯浣鍐欏叆澶存枃浠躲3銆佺劧鍚庡湪婧愭枃浠朵腑鍒涘缓main婧愭枃浠跺拰Stu婧愭枃浠躲傚啀main鏂囦欢涓啓鍏ntmian锛堬級浠g爜銆4銆佺劧鍚庡湪mian涓诲嚱鏁颁腑锛屽啓鍏hile璇彞鏃犻檺寰幆銆傚啀鍐欏叆Init鍑芥暟銆5銆佸湪Stu...
  • C璇█涓 濡備綍寤虹珛涓涓鍌ㄥ瓨鏁版嵁鐨勬枃浠
    绛旓細1,fp);鏁版嵁鍦板潃锛堣鍑虹殑鏁版嵁浼氭斁鍦ㄨ繖涓湴鍧锛夋暟鎹瓧鑺 涓暟 鏂囦欢鎸囬拡 fwrite(&library,sizeof(int),1,dfp);鏁版嵁鍦板潃锛堢敱杩欎釜鍦板潃寮濮嬪啓鍏ユ暟鎹級鏁版嵁瀛楄妭 涓暟 鏂囦欢鎸囬拡 fclose(fp);鍏抽棴鏂囦欢鎸囬拡 鎵撳紑鏂瑰紡 w+ 锛堜細娓呯┖鏁版嵁锛夎鍐欐柊寤 r 鍙 a+ 鍦ㄦ枃浠舵湯灏捐拷鍔 杩樻湁涓浜涖傘傘備絾鎴戠敤鐨勪笉澶 璋旦...
  • 姹備互涓c璇█缂栫▼:涓涓绠鍗鐨瀛︾敓鎴愮哗绠$悊绯荤粺銆傚叾涓瘡涓鐢熶俊鎭寘鎷 ...
    绛旓細涓涓绠鍗曠殑瀛︾敓鎴愮哗绠$悊绯荤粺銆傚叾涓瘡涓鐢熶俊鎭寘鎷鍙枫佸鍚嶃佹暟瀛︽垚缁┿佽嫳璇垚缁┿佽绠楁満鎴愮哗銆傜紪鍐欎竴涓彍鍗曠▼搴忓垎鍒畬鎴愪互涓嬪姛鑳:姣忎釜瀛︾敓鐨勪俊鎭浣跨敤缁撴瀯浣鍙橀噺瀛樺偍銆傜紪鍐欏嚱鏁癴u... 涓涓畝鍗曠殑瀛︾敓鎴愮哗绠$悊绯荤粺銆傚叾涓瘡涓鐢熶俊鎭寘鎷鍙枫佸鍚嶃佹暟瀛︽垚缁┿佽嫳璇垚缁┿佽绠楁満鎴愮哗銆傜紪鍐欎竴涓彍鍗曠▼搴忓垎鍒畬鎴愪互涓嬪姛鑳:姣忎釜...
  • 瀛︾敓鍩烘湰淇℃伅绠$悊(鏁版嵁缁撴瀯鐢–璇█鎻忚堪)
    绛旓細1)瀛︾敓鐨勪俊鎭瓨鏀惧湪鏂囨湰鏂囦欢涓,姣忔潯瀛︾敓璁板綍鏈変笅鍒楁暟鎹」:瀛﹀彿銆佸鍚嶃佹у埆銆佸勾榫勩(2)璇曡璁涓涓绯荤粺,瀹屾垚瀵瑰鐢熺邯褰曠殑鎻掑叆銆佸垹闄ゅ拰鏌ユ壘绛夋搷浣溿(3)璁捐鍚堥傜殑鏁版嵁缁撴瀯,灏介噺鎻愰珮... 1) 瀛︾敓鐨勪俊鎭瓨鏀惧湪鏂囨湰鏂囦欢涓,姣忔潯瀛︾敓璁板綍鏈変笅鍒楁暟鎹」:瀛﹀彿銆佸鍚嶃佹у埆銆佸勾榫勩(2) 璇曡璁′竴涓郴缁,瀹屾垚瀵瑰鐢熺邯褰曠殑...
  • 鐢C璇█缂栧啓
    绛旓細鐢ㄩ潤鎬佹暟缁(鎴栭摼琛)缁撴瀯瀹炵幇瀛︾敓妗f绠$悊,鏁扮粍鐨勬瘡涓涓鍏冪礌鏄粨鏋勪綋绫诲瀷閫氳繃杩欎釜渚嬪瓙浜嗚В鏁扮粍搴撶鐞嗙殑鍩烘湰鍔熻兘,閲嶇偣鎺屾彙鏁扮粍鍏冪礌涓缁撴瀯浣撶殑搴旂敤,鏁扮粍鍋氬嚱鏁板弬鏁,鏂囦欢璇诲啓,鑷畾... 鐢ㄩ潤鎬佹暟缁(鎴栭摼琛)缁撴瀯瀹炵幇瀛︾敓妗f绠$悊,鏁扮粍鐨勬瘡涓涓厓绱犳槸缁撴瀯浣撶被鍨嬮氳繃杩欎釜渚嬪瓙浜嗚В鏁扮粍搴撶鐞嗙殑鍩烘湰鍔熻兘,閲嶇偣鎺屾彙鏁扮粍鍏冪礌涓虹粨鏋勪綋...
  • 鐢C璇█璁捐涓涓瀛︾敓鎴愮哗绠$悊绯荤粺
    绛旓細璇锋暀c璇█楂樻墜~~~璁捐涓涓瀛︾敓鎴愮哗绠$悊绯荤粺鍔熻兘:1.瀛︾敓鎴愮哗鐨勫綍鍏ュ苟淇濆瓨(璇剧▼闂ㄦ暟涓篘);2.杈撳嚭鍏ㄧ彮鍚屽鍚勯棬璇剧▼鐨勬垚缁(浜烘暟涓篗);3.杈撳叆瀛﹀彿,鏌ヨ璇ュ鐢熷悇闂ㄨ绋嬫垚缁;4.杈... 鎬ユユ!!!璇锋暀c璇█楂樻墜~~~璁捐涓涓鐢熸垚缁╃鐞嗙郴缁熷姛鑳: 1.瀛︾敓鎴愮哗鐨勫綍鍏ュ苟淇濆瓨(璇剧▼闂ㄦ暟涓篘); 2.杈撳嚭鍏ㄧ彮鍚屽鍚勯棬璇剧▼...
  • 鐢–缂栧啓鐝骇鎴愮哗绠$悊绯荤粺
    绛旓細涓銆 闂鎻忚堪:瀵逛竴涓湁N涓鐢熺殑鐝骇,姣忎釜瀛︾敓鏈塎闂ㄨ绋嬨傝绯荤粺瀹炵幇瀵圭彮绾ф垚缁╃殑褰曞叆銆佹樉绀恒佷慨鏀广佹帓搴忋佷繚瀛樼瓑鎿嶄綔鐨勭鐞嗐備簩銆佸姛鑳借姹:1銆佹湰绯荤粺閲囩敤涓涓粨鏋勪綋鏁扮粍,姣忎釜鏁版嵁鐨勭粨鏋勫簲褰撳寘鎷:瀛﹀彿銆佸鍚嶃丮闂ㄨ绋嬪悕绉般2銆佹湰绯荤粺鏄剧ず杩欐牱鐨勮彍鍗:璇烽夋嫨绯荤粺鍔熻兘椤:a銆 鎴愮哗褰曞叆b銆 鎴愮哗鏄剧ずc銆 鎴愮哗淇濆瓨d...
  • 鐢c璇█閾捐〃缂栧啓涓涓瀛︾敓淇℃伅绯荤粺绋嬪簭,瑕佹眰杈撳嚭瀛︾敓鐨瀛﹀彿,濮撳悕,鎬у埆...
    绛旓細/ 鐢c璇█閾捐〃缂栧啓涓涓瀛︾敓淇℃伅绯荤粺绋嬪簭锛岃姹傝緭鍑哄鐢熺殑瀛﹀彿锛屽鍚嶏紝鎬у埆锛岃繕鏈変笁闂ㄨ姣斿璇紝鏁帮紝澶栫殑鎴愮哗 / //FileName: stuinfo.c include <stdio.h> include <stdlib.h> include <string.h> define SERIALLEN 20 define COURSENUM 3 typedef struct { char course[SERIALLEN];float score;}...
  • 鐢缁撴瀯浣鏁扮粍鎴栭摼琛ㄥ紑鍙涓涓灏忓瀷鐨瀛︾敓鎴愮哗绠$悊绯荤粺銆
    绛旓細getdate(&d); /*璇诲彇绯荤粺鏃ユ湡骞舵妸瀹冩斁鍒缁撴瀯浣d涓*/ printf("press any key to enter the menu..."); /*鎸変换涓閿繘鍏ヤ富鑿滃崟*/ getch(); /*浠庨敭鐩樿鍙涓涓瀛楃,浣嗕笉鏄剧ず浜庡睆骞*/ clrscr(); /*娓呭睆*/ printf("***\n");printf("\t\t Welcome to\n");printf("\n\t\t The stu...
  • 扩展阅读:c++教程 ... c#结构体 ... c#messagebox ... c++编程 ... c#基本结构 ... c#程序结构 ... c语言定义一个结构体 ... c语言怎么输出结构体 ... c语言中结构体的使用 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网