我想一次读入一个输入的字符。我不知道这个输入会有多大,所以我不是将数组指向输入,而是一次处理一个字符并构造一个链表。我遇到的问题是,在读取最后一个字符后,我如何终止这个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);
}
发布于 2016-02-11 07:05:32
如果要读取所有字符,包括空格字符,请使用:
int c;
while ( (c = getchar()) != EOF )
{
// Use c as a char.
}
如果要跳过空格字符,请使用:
char c;
while ( scanf(" %c", &c) == 1 )
{
// Use c.
}
注意,在这两种情况下,使用int
和char
作为c
的类型。
发布于 2016-02-11 07:35:16
好吧,我真的想通了!我猜当scanf完成从输入的读取时,它会返回一个< 0的整数,所以!= -1并不总是有效的,因为它不会特别返回-1。
参考: ben glasser在这篇文章上的回答:scanf() in while loop not terminating?
发布于 2016-02-11 12:31:12
成功完成scanf函数后,它将是一个非零值(value>0)。如果出现任何问题,那么它将返回0,我认为在任何情况下,你都不会得到-1,所以如果你想终止循环,你可以提示用户给出一个特殊的字符,表示input.Or的结束,如果你是从文件中读取它,那么你可以使用EOF来终止循环。
希望您会喜欢这个解决方案...
如果任何人发现我的答案中有任何错误,请在下面进行评论。我将非常感谢他。
https://stackoverflow.com/questions/35327689
复制相似问题