2013-08-25 52 views
0

我需要使用fgets從鍵盤獲得格式化輸入(即格式爲13XXXX的學號)。我知道scanf這可能是可能的,但我不太確定fgets。我如何確保用戶輸入一個以13開頭的字符串?如何使用fgets從鍵盤掃描格式化的輸入(字符串)?

printf (">>\t\tStudent No. (13XXXX): "); 
fgets (sNum[b], sizeof (sNum), stdin); 

編輯:sNum是學生數量的字符串。 謝謝。

+0

你能展示一些代碼什麼是snum?通常你會想要說fgets(東西,sizeof(something),stdin),然後通常檢查fgets的返回值。 – dcaswell

+0

@ user814064感謝您指出。我編輯過它。 – Sakamoto

回答

1

您撥打fgets()可能是錯誤的。

char line[4096]; 
char student_no[7]; 

printf(">>\t\tStudent No. (13XXXX): "); 
if (fgets(line, sizeof(line), stdin) == 0) 
    ...deal with EOF... 
if (sscanf(line, "%6s", line) != 1) 
    ...deal with oddball input... 
if (strlen(student_no) != 6 || strncmp(student_no, "13", 2) != 0) 
    ...too short or not starting 13... 

如果您認爲合適,您可以應用更多條件。例如,XXXX應該是數字嗎?如果是這樣,您可以將字符串轉換爲int,可能使用strtol(),因爲它會告訴您第一個未轉換的字符,您希望該字符是字符串的終止空字符。您還可以通過除以10,000並檢查結果是13來驗證數字是13XXXX。您可能還想看看在前6個非空白字符(line中剩下的部分)後面會出現什麼內容等。

1

使用fgets獲取一個字符串,然後sscanf來解釋它。 %i的格式字符串會將字符串解釋爲數字。 sscanf的返回值將告訴你該解釋是否成功(即用戶輸入的數字)。一旦你知道了,然後將這個數字除以10,000。如果結果是13,那麼您知道輸入的數字範圍是13x,xxx

0
printf (">>\t\tStudent No. (13XXXX): "); 
fgets (sNum[b], sizeof (sNum), stdin); 

sNum[b]應該是sNum,它是一個指針。

從stdin中獲得一行與fgets後,您可以檢查regular expression行:"^13.+"

0

聽起來像你在找fscanf

int fscanf (FILE * stream, const char * format, ...);