當前位置:編程學習大全網 - 編程語言 - C語言編程問題!!高手救命,在線等答案

C語言編程問題!!高手救命,在線等答案

分析過程:

重新定義結構體:

typedef struct student {

float c;

float java;

} STU;

然後在for循環內僅使用:

scanf("%f",&stu[i].c); // 或者&(stu[i].c)

scanf("%f",&stu[i].java); // 或者&(stu[i].java)

問題依舊。

但如果此時已經定義了float fTmp;並在循環體內這樣寫:

scanf("%f",&fTmp);

stu[i].c = fTmp;

scanf("%f",&fTmp);

stu[i].java = fTmp;

則問題得到解決。

幾經修改,最後改成最原先的代碼,問題也不存在了,無語……

原因分析:

可能是C運行庫的問題,代碼方面理論上沒有任何問題的。

另外,對於應該輸入float的時候用戶輸入char導致跳過某些變量輸入的情況,這和scanf內部實現的機制有關,因為它是靠類型指針來獲取對應值的,那麽如果對於普通類型(比如float,VC6中為4字節)變量,如果用戶的錄入有問題(比如char*),scanf會直接跳過當前變量的賦值。針對這種情況,如果非要用C語言而不是C++的話,那麽目前還沒有好的防止錯誤或者在輸入錯誤時給出提示的方法。

以下是模擬錯誤的執行過程:

姓名:張三

C分數:12

JAVA分數:12

姓名:王

C分數:99

JAVA分數:66

姓名:劉

C分數:34

JAVA分數:56

姓名:陳

C分數:aa

JAVA分數:姓名:cc

C分數:bb

JAVA分數:

<01> [0x0013FEE4] 12.00 [0x0013FEE8] 12.00 "張三"

<02> [0x0013FF04] 99.00 [0x0013FF08] 66.00 "王"

<03> [0x0013FF24] 34.00 [0x0013FF28] 56.00 "劉"

<04> [0x0013FF44] -107374176.00 [0x0013FF48] -107374176.00 "陳"

<05> [0x0013FF64] -107374176.00 [0x0013FF68] -107374176.00 "cc"

Press any key to continue

用於模擬該錯誤的代碼如下:

#include "stdio.h"

#define n 5

struct student

{

int num;

float c;

float java;

char name[20];

};

void main()

{

struct student stu[n];

int i;

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

{

stu[i].num=i+1;

printf("姓名:");

fflush(stdin);

gets(stu[i].name);

printf(" C分數:");

scanf("%f",&stu[i].c);

// printf("[0x%08X] size:%3d\n",&(stu[i].c),sizeof(stu[i].c));

printf(" JAVA分數:");

scanf("%f",&(stu[i].java));

}

printf("\n\n");

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

{

printf("<%02d> [0x%08X] %.2f [0x%08X] %.2f \"%s\"\n",stu[i].num, &(stu[i].c),stu[i].c,&(stu[i].java),stu[i].java,stu[i].name);

}

}

  • 上一篇:數學差能學計算機嗎 數學和計算機有什麽聯系嗎
  • 下一篇:免費介紹視頻數控車床編程
  • copyright 2024編程學習大全網