程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 指針-關於C語言結構體的問題

指針-關於C語言結構體的問題

編輯:編程解疑
關於C語言結構體的問題
 //4. 設一個班有若干學生(如10人),請定義學生結構包含以下信息:學生學號、學生姓名、高級語言程序課的成績,請寫程序完成以下功能:
//(1)定義函數以學生結構指針(指向學生數組)為參數,逐個錄入該班集的學生信息;
//(2)定義函數以學生結構指針(指向學生數組)為參數,求出該班高級語言程序課的排名第一的學生,並輸出該第一名學生的學號、姓名及高級語言程序課成績。
//(3)在主程序中完成測試。
#include<stdio.h>
struct Student 
{
    int number;
    char name[20];
    double scores;
};
void StuInfo(struct Student *p);
void Rank(struct Student *p);

int main()
{
    struct Student stus[3];
    struct Student *p;
    p=stus;
    StuInfo(p);
    Rank(p);
    return 0;
}

void StuInfo(struct Student *p) 
{
    printf("請輸入學生的學號,姓名,以及成績:"); 
    for(int i=0;i<3;i++) 
    {
        scanf("%d%s%f",&(p+i)->number,&(p+i)->name,&(p+i)->scores); 
    }

}

void Rank(struct Student *p)
{
    struct Student *q;
    q=p; 
    for(int i=0;i<2;i++)
    {
        if(q->scores<(p+i+1)->scores)
        {
            q=p+i+1;
        }
    }
    printf("成績最好的學生學號%d,姓名%s,成績%f",q->number,q->name,q->scores);
}

請問為什麼最後輸出的scores總是0.000000?很是疑惑。

最佳回答:


輸入double類型時scanf格式是lf,使用f字節數不對,具體的原因我就不清楚了,我c也不行~~

 for(int i=0;i<3;i++) 
    {
        scanf("%d%s%f",&(p+i)->number,&(p+i)->name,&(p+i)->scores); 
    }

scanf("%d%s%lf",...)後面就不寫了

你試一下,我用printf輸出調試出來的

另外,數組名就是地址,那後邊的&(p+i)->name是不是應該去掉前面的& ?我們討論一下

HJMing123
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved