2015-10-07 61 views
-1

因此,我進入大學幾個星期,現在我與C有愛/恨關係。我喜歡這門語言,但是它的某些部分讓我興奮不已。如何在不使用stdlib.h的情況下驗證C語言中的輸入?

目前,我需要進行一個練習,其中從命令行獲取兩個參數,然後檢查它們是否爲字母或零(無論是哪種情況,「無效輸入」和'無效輸入 - 除以零不允許')

但是,對於這個特定練習,我們的標記系統會拒絕任何包含stdlib的程序,這意味着使用類似atoi或atof的東西不是選項。我的教授提到了一些關於使用scanf將參數先解析爲字符串然後將其轉換爲整數的說法,但老實說,現在這已經超出我了。

+5

歡迎使用堆棧溢出!現在你的問題出現了,只是要求你的作業問題的答案,這不是Stack Overflow的問題。我會建議先做一些自己的研究(有無盡的信息來源)並試圖弄清楚。如果遇到可能會產生[良好問題]的特定問題(http://stackoverflow.com/help/how-to-ask),請隨時再次詢問。 – jaredk

+0

哦,別擔心,這不是我訴諸的第一件事。我花了好幾個小時試圖通過純粹的意志來找出問題,然後我轉向我的課程書籍和我的教授,沒有人特別有幫助。 – Absoguar

回答

0

使用sscanf()。
你的主要應該看起來像那樣。

int main(int argc, char *argv[]) 
{ 
    int numCount, x, y; 
    numCount = sscanf(argv[1], "%d", &x) + sscanf(argv[2], "%d", &y); 

    if(numCount != 2){ 
     printf("[-] One of the arguments is not a valid number.\n"); 
     return 0;} 

    if(x == 0 || y == 0){ 
     printf("[-] one of the numbers is zero.\n"); 
     return 0;} 

    printf("[+] The arguments are valid numbers.\n"); 
} 

sscanf以您選擇的格式掃描緩衝區。在這種情況下,你有兩個參數,這意味着你有兩個緩衝區。您希望每個緩衝區的格式是「%d」,因爲您希望每個緩衝區都是一個數字。 sscanf返回完成的成功「讀取」數量。如果緩衝區不包含有效數字,則每個sscanf的返回值將爲0,因此我們期望numCount爲2.

+0

在學生有機會從他們身上學到東西之前,請不要給出完整的家庭作業問題答案。 – Davislor

+0

個人,我喜歡從代碼片段學習。無論如何,從現在開始,我會避免給出作業答案。 – hyprnir

+0

不要擔心Lorehead我不只是打算複製這個。其實我試圖在這裏理解代碼並重寫它。現在唯一的問題是,試圖將其中一個數字除以另一個數字會引發一個未處理的異常,這對我來說並不合適。 – Absoguar

0

如果你的教授允許使用sscanf(3)<stdio.h>的其他功能,你只需要閱讀他們的文檔並使用它們。但我想那個練習他不想要那個。

然後,您需要重新實施自己的等效atoi,但將其稱爲my_atoi以避免混淆。這不是什麼大不了的事。你可以考慮實現一種strtol(3)來代替管理結束指針。

順便說一句,你甚至可以找到一些C standard library一些free software實現(例如musl-libc ....),並研究他們的源代碼,但你的老師可能會認爲這是欺騙,如果你不告訴他。

但是,在解決了特定練習之後,我建議您閱讀一些免費的軟件代碼(並且不要猶豫地告訴您的老師),因爲它作爲一個軟件開發人員非常具有啓發性並且更接近您的實際工作生活後來(在你的第一份工作中,你很可能不會開始一個軟件項目)。

相關問題