[英]Char array taking input putting remaining data to consecutive char array
我在person.h文件中定義了一個結構
struct person{
char firstName[11];
char familyName[21];
char telephone[11];
int isStudent;
};
現在我要輸入firstName,familyName等的輸入。
所以我做了這樣的事情:
void AddRecord(struct person person[20],int currentElemetCount,int maxCount){
getFirstName(person[currentElemetCount].firstName);
getFamilyName(person[currentElemetCount].familyName);
}
在其他commons.c文件中,我定義了這些功能,
void getFirstName(char firstName[10]){
printf("Enter First Name : ");
scanf("%10s", firstName);
}
void getFamilyName(char familyName[20]){
printf("Enter Family Name : ");
scanf("%20s", familyName);
}
但是,當我執行此程序時,在實際情況下,我希望如果用戶輸入的名字超過10個字符,則只需忽略它們。 但是在這里,它們被分配給familyName,並且不能為familyName輸入任何內容。
可能是什么原因? 請幫忙。
假設輸入的字符串“ avshgvdshvdhsdhsdhsdhdh”很長。 然后我想要firstName char數組為“ avshgvdshv”。 但是,剩下的這段代碼將“ dhsdhsdhsdhdh”字符串分配給不希望的familyName數組。
stdin
(輸入流) fgets
多余的數據(超過10個字符)保留在輸入流中,並在下次調用scanf
。
清除stdin
int ch;
while ((ch = getchar()) != '\n' && ch != EOF);
我在自己的程序中使用的一部分代碼使用fgets
獲取輸入,並清除輸入流以允許其他輸入:
fgets(c, size, stdin);
if (c[strlen(c) - 1] != '\n')
int ch;
while ((ch = getchar()) != '\n' && ch != EOF);
}
fgets
函數接受輸入,直到遇到換行符( \\n
)或已讀取最大可讀字節數(在您的情況下為10)。 通常, fgets
給出一個以換行符結尾的字符串( char*
, \\n
)。 此代碼段檢查輸入內容,以查看最后一個字符是換行符(指示長度是確定的)還是其他字符(指示它太長並且流中有額外的數據)。
您可以用scanf
以這種方式丟棄前10個字符之后的所有字符
scanf("%10s%*s", firstName);
在這種情況下, %*s
表示掃描字符串,但不將其存儲到變量中。 請注意,在這種情況下scanf
將停止對任何空白char進行掃描。 如果您輸入的字符串中的空格會引起問題
您需要清除標准輸入流的內容。 可以通過更改以下內容來完成:
scanf("%10s", firstName);
scanf("%20s", familyName);
至
scanf("%10s%*[^\n]", firstName);scanf("%*c");
scanf("%20s%*[^\n]", familyName);scanf("%*c");
%*[^\\n]
指示scanf
掃描並丟棄所有內容,直到換行符( '\\n'
)。 %*c
指示scanf
掃描並丟棄一個字符,在這種情況下,該字符可能是換行符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.