這將實際驗證我的用戶輸入只有兩個元素,然後換行嗎?scanf驗證C
char newline
scanf(" %s %s%c", out, in, &newline);
if(newline != '\n'){
error();
}
這將實際驗證我的用戶輸入只有兩個元素,然後換行嗎?scanf驗證C
char newline
scanf(" %s %s%c", out, in, &newline);
if(newline != '\n'){
error();
}
您必須從scanf()
檢查退貨狀態;如果它不返回3,那麼驗證失敗。您的支票將確保有兩個'單詞'(可能在前面有一些空格)。在第二個單詞之後,你將不會被允許放置空格。請注意,如果驗證失敗,則可能需要「吃」餘下的行 - 如果在newline
中有換行符,則不會。
不!如果第二個字符串和換行符之間有一些空格字符,則scanf
將不正確。使用getc()
爲:
scanf("%s%s", buf1, buf2);
char newline = 0;
while((newline = getc()) == ' ' || newline == '\t');
if(newline != '\n'){
error();
}
編輯:
添加案例尾部空格。
你測試過了嗎? – karlphillip 2011-05-12 15:39:29
小心點。 'out'和'in'需要有足夠的空間容納用戶輸入的內容。你應該使用'%ns',其中'n'是'out'或''''-1'指向的緩衝區的大小。所以,如果你的緩衝區長度是12個字節,那麼'%11s'。 – nmichaels 2011-05-12 15:39:41
我在[20] char out [20]中有char,並且謝謝,「%20s%20x」 – Jono 2011-05-12 15:42:02