我想一次输入一个字符。我不知道这个输入有多大,所以我没有将数组指向输入,而是一次处理一个字符并构建一个链表。我遇到的问题是,如何在读完最后一个字符后终止这个循环?
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);
}
答案 0 :(得分:1)
如果要阅读所有字符,包括空格字符,请使用:
int c;
while ( (c = getchar()) != EOF )
{
// Use c as a char.
}
如果要跳过空格字符,请使用:
char c;
while ( scanf(" %c", &c) == 1 )
{
// Use c.
}
请注意在这两种情况下使用int
vs char
作为c
的类型。
答案 1 :(得分:0)
好的,我真的想通了!我想当scanf从输入读取时,它返回一个整数< 0,所以!= -1并不总是有效,因为它没有特别返回-1。
REF: 本格拉瑟回答这篇文章: scanf() in while loop not terminating?
答案 2 :(得分:0)
在成功完成scanf功能之后,它将是非零值(值> 0)。如果出现任何问题,那么它将返回0.我认为在任何情况下你都不会得到-1。所以如果你想终止循环,你可以提示用户给出一个特殊字符,表示结束input.Or如果你从文件中读取它,那么你可以使用EOF来终止循环。
希望你会喜欢这个解决方案......
如果有人在我的回答中发现任何错误,请在下面发表评论。 我将非常感谢他。