2011-07-19 29 views
0

這裏是我正在處理的代碼。它與一系列結構有關。這個程序目前工作正常。但是,如果我將結構員工中薪水變量的數據類型替換爲浮點數,則會出現邏輯錯誤。我無法在scanf時輸入工資值。即使我更改了格式說明符,問題仍然存在。任何人都可以在這裏發現錯誤

任何人都可以找到錯誤,它將如何解決?

#include<stdio.h> 
#include<conio.h> 

struct employee 
{ 
int emp_no; 
char emp_name[25]; 
int salary; 
}; 

void main() 
{ 
    struct employee emp[2]; 
    int i; 
    clrscr(); 
    for(i=0;i<2;i++) 
    { 
     printf("enter details for employee #%d:\n",(i+1)); 
     printf("code:"); 
     scanf("%d",&emp[i].emp_no); 
     printf("name:"); 
     scanf("%s",emp[i].emp_name); 
     printf("salary:"); 
     scanf("%d",&emp[i].salary); 
    } 
    printf("\n"); 
    for(i=0;i<2;i++) 
    { 
     printf("details of employee #%d are:\n", (i+1)); 
     printf("code: %d\n", emp[i].emp_no); 
     printf("name: %s\n", emp[i].emp_name); 
     printf("salary: %d\n", emp[i].salary); 
    } 
    getch(); 
} 
+1

浮劑是'%F' –

+0

什麼錯誤出現? –

+0

當您將'salary'更改爲float時,是否將'scanf'和'printf'中的格式更改爲'%f'(而不是'%d')? – DarkDust

回答

1

只是包含這個功能您的主要功能後:

static void force_fpf(){

float x,*y;

y=&x;

x=*y;

}

這將運行您的程序成功

+0

yes ...它的工作..謝謝 –

+1

Allllll right:這會強制編譯器鏈接浮點庫而不是沒有鏈接庫,從而啓用所有浮點操作。請參閱[Leeor Aharon's](http://stackoverflow.com/questions/6744238/can-anyone-spot-the-error-here/6745233#6745233)解答的答案。 – Gui13

+0

對於小型機器(包括Turbo C)的一些編譯器,如果看起來不需要浮點支持,則不提供浮點支持。特別是,printf和scanf的非浮點版本通過不包含處理%e,%f和%g的代碼來節省空間。 Turbo C的啓發式判斷程序是否使用浮點數是不夠的,程序員有時必須插入額外的顯式調用到浮點庫例程來強制加載浮點支持。所以我使用的上述函數強制編譯器。 Gui13你是對的 – Pramod

相關問題