我需要使用fgets
從鍵盤獲得格式化輸入(即格式爲13XXXX的學號)。我知道scanf
這可能是可能的,但我不太確定fgets
。我如何確保用戶輸入一個以13
開頭的字符串?如何使用fgets從鍵盤掃描格式化的輸入(字符串)?
printf (">>\t\tStudent No. (13XXXX): ");
fgets (sNum[b], sizeof (sNum), stdin);
編輯:sNum
是學生數量的字符串。 謝謝。
我需要使用fgets
從鍵盤獲得格式化輸入(即格式爲13XXXX的學號)。我知道scanf
這可能是可能的,但我不太確定fgets
。我如何確保用戶輸入一個以13
開頭的字符串?如何使用fgets從鍵盤掃描格式化的輸入(字符串)?
printf (">>\t\tStudent No. (13XXXX): ");
fgets (sNum[b], sizeof (sNum), stdin);
編輯:sNum
是學生數量的字符串。 謝謝。
您撥打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
中剩下的部分)後面會出現什麼內容等。
使用fgets獲取一個字符串,然後sscanf來解釋它。 %i的格式字符串會將字符串解釋爲數字。 sscanf的返回值將告訴你該解釋是否成功(即用戶輸入的數字)。一旦你知道了,然後將這個數字除以10,000。如果結果是13,那麼您知道輸入的數字範圍是13x,xxx
printf (">>\t\tStudent No. (13XXXX): ");
fgets (sNum[b], sizeof (sNum), stdin);
sNum[b]
應該是sNum,它是一個指針。
從stdin中獲得一行與fgets後,您可以檢查regular expression行:"^13.+"
。
聽起來像你在找fscanf
。
int fscanf (FILE * stream, const char * format, ...);
你能展示一些代碼什麼是snum?通常你會想要說fgets(東西,sizeof(something),stdin),然後通常檢查fgets的返回值。 – dcaswell
@ user814064感謝您指出。我編輯過它。 – Sakamoto