簡體   English   中英

終止While循環scanf(“%c”,&ch)

[英]Terminate While Loop scanf(“%c”,&ch)

我想一次輸入一個字符。 我不知道此輸入的大小,因此我不是將數組指向輸入,而是一次處理每個字符並構造一個鏈表。 我遇到的問題是,在讀取完最后一個字符后,如何在while循環中終止此操作?

struct node{
struct node *next;
int data;
};

int main(){

int i; //iterator
char ch;
//char *numberArr = (char*)malloc(1024,sizeof(char*));
struct node* head = NULL;
struct node* curr = NULL;
struct node* tail = NULL;


printf("Please input a number: ");
while (((scanf(" %c",&ch)) != -1)){
    printf("%c",ch);
}

如果要讀取所有字符,包括空格字符,請使用:

int c;
while ( (c = getchar()) != EOF )
{
   // Use c as a char.
}

如果要跳過空格字符,請使用:

char c;
while ( scanf(" %c", &c) == 1 )
{
   // Use c.
}

注意,在兩種情況下,將int vs char用作c的類型。

好的,我實際上知道了! 我想當scanf完成從輸入的讀取時,它返回一個整數<0,所以!= -1並不總是有效,因為它沒有專門返回-1。

參考:本·格拉瑟在這篇文章上的答案: while循環中的scanf()不終止嗎?

成功完成scanf函數后,它將為非零值(value> 0)。 如果出現任何問題,它將返回0.我認為在任何情況下都不會得到-1。因此,如果要終止循環,則可以提示用戶輸入一個特殊字符來表示結尾輸入。或者,如果您正在從文件中讀取它,則可以使用EOF終止循環。

希望您會喜歡該解決方案。

如果有人在我的答案中發現任何錯誤,請在下面進行評論。 我將非常感謝他。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM