好的,我想說我對C的瞭解很少。我在我的高中獨立研究它,所以我來找你們尋求幫助。我正在考慮C1,我不知道這是#或++還是僅僅是C,甚至不知道它們之間的差異。無論如何,我的問題是如何確保用戶輸入一個整數而不是一個浮點數,或者確保這個人沒有在float輸入中輸入一個&符號。在記事本如何驗證C中的用戶輸入?
我的代碼,並保存爲.c文件,然後gcc的他們在命令提示符下,如果會給你什麼我的工作的想法。
好的,我想說我對C的瞭解很少。我在我的高中獨立研究它,所以我來找你們尋求幫助。我正在考慮C1,我不知道這是#或++還是僅僅是C,甚至不知道它們之間的差異。無論如何,我的問題是如何確保用戶輸入一個整數而不是一個浮點數,或者確保這個人沒有在float輸入中輸入一個&符號。在記事本如何驗證C中的用戶輸入?
我的代碼,並保存爲.c文件,然後gcc的他們在命令提示符下,如果會給你什麼我的工作的想法。
嗯,我想你是編程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
。
我建議'fgets'而不是'scanf'。做這樣的事情'char buff [20]; fgets(buff,size,stdin);'。看起來'scanf'可能會因緩衝區溢出而破壞您的propram。我認爲你用'fgets'更安全,因爲你可以確定你的輸入。 – Chris
對於捕捉字符串,幾乎是的。 –
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;
}
等待 - 你怎麼寫代碼不知道哪一種語言它用? – Nim
@Nim有一些經驗與我正在學習的內容一致,他們只是告訴我我必須做什麼,而且我知道一些陳述來完成所有這些。我知道代碼我只是不知道它叫什麼。在不知道自己在做什麼的情況下用語言編程並不難。想想所有知道如何編程的小孩。 – ChapmIndustries