在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C/ C語言問題 結(jié)構(gòu)體

C語言問題 結(jié)構(gòu)體

一道學(xué)校留的題目
請定義一個描述學(xué)生基本信息的結(jié)構(gòu),包括姓名,學(xué)號,籍貫,身份證號,年齡,家庭住址,性別,聯(lián)系方式等。并定義一個結(jié)構(gòu)體數(shù)組。編程:

a) 編寫函數(shù) input(), 輸入基本信息(3~5 條記錄);

b) 編寫函數(shù) print(),輸出全體記錄信息;

c) 編寫函數(shù) search(), 檢索一個指定的學(xué)生信息并返回, 由主函數(shù)打印到屏幕上。
【輸入形式】學(xué)生數(shù)量N

N個學(xué)生的姓名 學(xué)號 籍貫 身份證號 年齡 家庭住址 性別 聯(lián)系方式

要查找的學(xué)生姓名

【輸出形式】N個學(xué)生的姓名,學(xué)號,籍貫,身份證號,年齡,家庭住址,性別,聯(lián)系方式

以及要查找的學(xué)生的姓名,學(xué)號,籍貫,身份證號,年齡,家庭住址,性別,聯(lián)系方式

【樣例輸入】

3
zhang 19920101 beijing 255141199201015656 25 beijing m 12114145654
li 18850202 liaoning 210212188502020303 14 liaoning w 14156865959
wang 121 tianjin 251242655252 20 tianjin m 12542542
zhang

【樣例輸出】

zhang,19920101,beijing,255141199201015656,25,beijing,m,12114145654

li,18850202,liaoning,210212188502020303,14,liaoning,w,14156865959

wang,121,tianjin,251242655252,20,tianjin,m,12542542

zhang,19920101,beijing,255141199201015656,25,beijing,m,12114145654

我的代碼:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
    char name[20] ;
    char num[15];
    char id[20];
    int age;
    char address[100];
    char addresss[100];
    char sex;
    char phone[15];
}stu[5];
void input(struct student stu[], int n);
void print(struct student stu[],int n);
void search(struct student stu[], char name[],int n);
int main()
{
    char name[20];
    int n;
    scanf("%d", &n);
    input(stu, n);
    scanf("%s", name);
    print(stu, n);
    search(stu, name, n);
    system("pause");
    return 0;
}
void input(struct student stu[], int n) {
    for (int i = 0; i < n; i++) {
        scanf("%s",stu[i].name);
        scanf("%s", stu[i].num);
        scanf("%s", stu[i].address);
        scanf("%s", stu[i].id);
        scanf("%d", &stu[i].age);
        scanf("%s", stu[i].addresss);
        scanf("%c", &stu[i].sex);
        scanf("%s", stu[i].phone);
    }
}
void print(struct student stu[],int n) {
    for (int i = 0; i < n; i++) {
        printf("%s,%s,%s,%s,%d,%s,%c,%s\n", stu[i].name, stu[i].num, stu[i].address, stu[i].id, stu[i].age, stu[i].addresss, stu[i].sex,stu[i].phone);
    }
}
void search(struct student stu[], char name[],int n) {
    for (int i = 0; i < n; i++) {
        if (strcmp(stu[i].name, name) == 0)
            printf("%s,%s,%s,%s,%d,%s,%c,%s\n", stu[i].name, stu[i].num, stu[i].address, stu[i].id, stu[i].age, stu[i].addresss, stu[i].sex, stu[i].phone);
    }
}

請問是哪里出錯了啊 我這個代碼輸出的不對 初學(xué)者謝謝各位!

回答
編輯回答
離魂曲

你應(yīng)該從輸出看出來點端倪吧。有沒有發(fā)現(xiàn)你打印出來的 sex 是一個空格?說明你輸入的也是空格。那問題出在哪里呢?

在 C 中,scanf 的 %s 會忽略前置空白符,遇到空白符終止;而 %c 就是讀一個字符,這個字符可以是空白符,你給的輸入示例中 zhang 19920101 beijing 255141199201015656 25 beijing m 12114145654,%s 讀完第二個 beijing 之后,%c 讀的不是 m 而是 beijing 后面的空格。

解決方法就是:輸入示例既然是一行一行的,那你就一行一行地讀吧

2017年4月21日 02:26
編輯回答
喵小咪
        scanf(" %c", &stu[i].sex);

注意%c前面的空格。

至于為什么,說來話長,請看這里

https://stackoverflow.com/a/4...
和這里
http://c-faq.com/stdio/scanfp...

2017年5月8日 19:44