2017-07-28 358 views
0

我在這裏輸入示例101-Name-3.4但不輸入3.4。它沒有顯示在輸出中。我該如何解決這個問題?我怎樣才能得到我在C中的最後輸入(浮點數據)?

for(i=0; i<n; ++i){ 
    printf("Enter ID-Name-CGPA receptively: "); 
    scanf("%lld-%[^-]s-%f", id[i], name[i], cgpa[i]); 

} 
+1

這是'id'?什麼是'名稱'?什麼是'cgpa'?你可以請出示他們的聲明嗎? –

+1

此外''%[「''格式說明符不*以*結尾。也許[這個'scanf'(和家庭)參考](http://en.cppreference.com/w/c/io/fscanf)可能有助於閱讀? –

+0

從'%[^ - ] s'中刪除's'。 (也許'scanf(「%lld - %[^ - ] - %f」,&id [i],name [i],&cgpa [i]);') – BLUEPIXY

回答

3

您需要從掃描集指令刪除後s格式字符串:

scanf("%lld-%[^-]-%f", id[i], name[i], cgpa[i]); 

s不是掃描集指令的一部分,所以scanf()嘗試和失敗,以匹配輸入中的s。如果代碼正在檢查呼叫的返回值scanf(),這可以被檢測到,這總是一個很好的做法。

此外,沒有聲明被示出,但如果id[]被聲明爲的long long int秒的陣列,並且cgpa[]被聲明爲的float秒的陣列,則該地址操作者應使用:

int ret_val = scanf("%lld-%[^-]s-%f", &id[i], name[i], &cgpa[i]); 
/* ret_val should be 3 */ 
+0

@ AbdullahAlmasud--未接受?什麼改變了?有什麼方法可以幫我改進我的答案嗎?我希望這不是關於被拒絕的編輯;這是社區,而不是我,我給出了不立即接受你提議的編輯的原因,並解釋了你如何修改你的問題,以便我接受你的編輯。 –

相關問題