2012-09-18 28 views
1

好的,我想說我對C的瞭解很少。我在我的高中獨立研究它,所以我來找你們尋求幫助。我正在考慮C1,我不知道這是#或++還是僅僅是C,甚至不知道它們之間的差異。無論如何,我的問題是如何確保用戶輸入一個整數而不是一個浮點數,或者確保這個人沒有在float輸入中輸入一個&符號。在記事本如何驗證C中的用戶輸入?

我的代碼,並保存爲.c文件,然後gcc的他們在命令提示符下,如果會給你什麼我的工作的想法。

+3

等待 - 你怎麼寫代碼不知道哪一種語言它用? – Nim

+0

@Nim有一些經驗與我正在學習的內容一致,他們只是告訴我我必須做什麼,而且我知道一些陳述來完成所有這些。我知道代碼我只是不知道它叫什麼。在不知道自己在做什麼的情況下用語言編程並不難。想想所有知道如何編程的小孩。 – ChapmIndustries

回答

0

您可以使用頭文件ctype.h聲明的功能,特別是功能isdigit

0

嗯,我想你是編程C,通過你對gcc的評論。但到了這個問題,如果你正在使用scanf,那麼它幾乎檢查了一切,你只需要知道如何使用它,例如:

int main(void) 
{ 
    float input; 
    if(scanf("%f", &input) == 1) 
    { 
     printf("OK, I could read your float: %f.\n", input); 
    } 
    else 
    { 
     printf("Not OK, I couldn't read your float.\n"); 
    } 
    return 0; 
} 

如果我輸入5.4654,將打印正確的號碼。 如果我輸入5.4&654將打印5.4,因爲當時在那裏float,並且它去,直到&字符。 但是,如果我輸入abc,它會失敗,並打印它無法讀取您的浮動。

這部作品的原因是因爲scanf返回讀取成功的數據的數量。因此,如果您要求"%f %f %d",則必須檢查返回值是否爲3,如果是這樣,則儘管隨機字符會妨礙但未被讀取,但一切正常。

或者,談論整數類型(以及類似的),你可以使用functions provided by ctype.h

+0

我建議'fgets'而不是'scanf'。做這樣的事情'char buff [20]; fgets(buff,size,stdin);'。看起來'scanf'可能會因緩衝區溢出而破壞您的propram。我認爲你用'fgets'更安全,因爲你可以確定你的輸入。 – Chris

+0

對於捕捉字符串,幾乎是的。 –

0

BESTEST方法是用fgets()讀取輸入的線和解析線。對於數字輸入,整數的strtol()和/或浮點數的strtod()是最全面的函數。

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

int main(void) { 
    char line[100]; 
    char *err; 
    int intval; 

    printf("Enter a number:\n"); 
    fgets(line, sizeof line, stdin); 

    errno = 0; 
    intval = strtol(line, &err, 10); 
    /* check for errors */ 
    if (errno) /* error */; 
    if (*err != '\n') /* error */; 

    return 0; 
}