2014-12-03 68 views
0

我在(C)編程一個絕對的初學者,我必須找到以下問題的解決方案:檢查輸入的字符串是否包含了特定的字符 - >浮點數

我要解析命令行參數浮動在結構中。這很好地使用argc,argvatof。但有沒有辦法檢查用戶是否在他的輸入中使用了有效的「浮點字符」(0-9.)?

atof僅返回其錯誤0.0當解析字符串的開頭沒有任何數字時。如果用戶寫例如./programname 4,5atof仍然會寫4到我的浮...

我會檢查每一個提交字符,此外,設置一個計數器檢查,用戶是否使用多於一個. 。我怎樣纔能有效地實現這一點?編輯: 謝謝你vor你的答案!我的程序僅用於將由09.的整數組成的字符串轉換。我忘了提及!我現在嘗試編寫一個函數,它將輸入字符串與包含有效字符的字符串進行比較,使用for和while while循環。正如我只想檢查第二和argv(argv[1]argv[2])的第三argmunent,我用環的第二外其餘的以實現...

+0

什麼' 「-3」'' 「1E-3」'之類的?因爲他們不只是由數字和'.'組成,他們應該被拒絕嗎? – 2014-12-03 15:39:33

回答

0

您可以使用sscanf和虛擬人物,看看整個字符串在this answer轉換與否,如:

#include <stdlib.h> 
#include <stdio.h> 

int main(int argc, char* argv[]) 
{ 
    char dummy; 
    float f; 
    if(sscanf(argv[1], "%f%c", &f,&dummy) != 1) 
    printf("Input error.\n"); 
    else 
    printf("%f\n", f); 
} 

Live demo here

+0

但是,這將愉快地轉換'「1e-3」'。不知道這是否是有意的。 – 2014-12-03 15:38:36

+0

謝謝你的回答!我的程序僅用於轉換由從'0'到'9'和'.'的整數組成的字符串。我忘了提及!我現在嘗試編寫一個函數,它將輸入字符串與包含有效字符的字符串進行比較,使用for和while while循環。因爲我只想檢查argv('argv [1]'和'argv [2]')的第二個和第三個argmunent,我使用第二個for循環以外的循環來實現... – ljagg 2014-12-04 10:37:10

+0

然後我建議手動檢查格式。或者是一個正則表達式,但是你會遇到兩個問題。 – rubenvb 2014-12-04 10:39:25

相關問題