繁体   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