我是 C 語言的新手,必須撰寫一個程式,要求用戶輸入大寫或小寫字母“t”,然后按 Enter。如果您輸入了字母“t”或其他資料,程式會通知您。像“tre”這樣的用戶輸入的情況應該被視為無效。我試過這樣的事情:
#include <stdio.h>
int main(void) {
char input;
printf("Please type letter \"t\" in upper or lower case:\n");
input = getchar();
printf("%c", input);
if (input != 't')
{
printf("\nWrong input");
return 0;
}
else {
printf("\nYou have entered: \"%c\"", input);
}
}
問題在于,如果用戶的輸入是“tasd”或“tre”或任何以字母“t”開頭的內容,則只讀取第一個字母并且 if 陳述句被視為 true。我試圖研究答案,但找不到任何有用的東西。
uj5u.com熱心網友回復:
檢查下一個字符是否是行尾 '\n'
#include <stdio.h>
int main(void)
{
char input;
char nextchar;
printf("Please type letter \"t\" in upper or lower case:\n");
input = getchar();
nextchar = getchar();
printf("%c", input);
if (input != 't' || nextchar!='\n')
{
printf("\nWrong input");
return 0;
}
else
{
printf("\nYou have entered: \"%c\"", input);
}
}
uj5u.com熱心網友回復:
您只讀取第一個字符。您可以使用 for 回圈解決此問題,直到您的 char 等于 \n。
uj5u.com熱心網友回復:
不是讀取單個字符,而是讀取整個字串。在讀取的字串周圍放置驗證
- 輸入的大小應為 1 個字符。
- 字符應該是 't'/'T'
uj5u.com熱心網友回復:
對于初學者,變數input應該具有型別int。
int input;
而不是讀取一個字符
input = getchar();
你可以使用例如
#include <ctype.h>
#include <stdio.h>
//...
int valid = ( input = getchar() ) != EOF && toupper( ( unsigned char )input ) == 'T';
if ( valid )
{
int tmp;
while ( ( tmp = getchar() ) != '\n' && isblank( ( unsigned char )tmp ) );
valid = tmp == '\n';
}
if ( valid )
{
printf( "\nYou have entered: \"%c\"\n", input );
}
else
{
puts( "\nWrong input" );
}
即使用時可以輸入字符't'和幾個空格。這樣的輸入應該被認為是有效的。
uj5u.com熱心網友回復:
掃描集%1[tT]將掃描一個字符,即 at或T。
說明%n符將捕獲scanf格式字串中到該點處理的字符數。
掃描集%*[^\n]將掃描并丟棄所有內容,直至換行。
使用這些,您可以回圈直到用戶輸入 at或T。
#include <stdio.h>
#include <stdlib.h>
int main ( void) {
char t[2] = "";
int scanned = 0;
int done = 0;
do {
printf ( "enter t or T\n");
done = scanf ( " %1[tT]", t); // scan whitespace then t or T
if ( EOF == done) {
fprintf ( stderr, "EOF\n");
return 1;
}
if ( done) { // scanned a t or T
scanned = 0;
scanf ( "%*[^\n]%n", &scanned); // scan and discard up to newline. count characters
if ( scanned) { // there were some characters
done = 0;
}
}
scanf ( "%*[^\n]"); // scan and discard up to newline
} while ( ! done);
return 0;
}
uj5u.com熱心網友回復:
根據您問題中提供的資訊,您不想僅驗證輸入的第一個字符,而是要驗證整行輸入。
為了將整行輸入讀取為字串,我建議您使用函式fgets. 之后,您可以檢查字串以確定輸入是否有效。
這是一個例子:
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
char line[200];
//prompt user for input
printf( "Please type letter \"t\" in upper or lower case: " );
//attempt to read one line of input
if ( fgets( line, sizeof line, stdin ) == NULL )
{
fprintf( stderr, "Error reading input!\n" );
exit( EXIT_FAILURE );
}
//verify that input string is valid
if ( ( line[0] == 't' || line[0] == 'T' ) && line[1] == '\n' )
printf( "Input is valid. You entered \"%c\".\n", line[0] );
else
printf( "Input is invalid!\n" );
}
該程式具有以下行為:
Please type letter "t" in upper or lower case: tre
Input is invalid!
Please type letter "t" in upper or lower case: t
Input is valid. You entered "t".
Please type letter "t" in upper or lower case: T
Input is valid. You entered "T".
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516683.html
標籤:C字符扫描获取字符礼帽
上一篇:char[]大小未計算在內
