首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Terminate While循环扫描(“%c”,&ch)

Terminate While循环扫描(“%c”,&ch)
EN

Stack Overflow用户
提问于 2016-02-11 06:59:56
回答 3查看 1.5K关注 0票数 0

我想一次读入一个输入的字符。我不知道这个输入会有多大,所以我不是将数组指向输入,而是一次处理一个字符并构造一个链表。我遇到的问题是,在读取最后一个字符后,我如何终止这个while循环?

代码语言:javascript
运行
复制
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);
}
EN

回答 3

Stack Overflow用户

发布于 2016-02-11 07:05:32

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

代码语言:javascript
运行
复制
int c;
while ( (c = getchar()) != EOF )
{
   // Use c as a char.
}

如果要跳过空格字符,请使用:

代码语言:javascript
运行
复制
char c;
while ( scanf(" %c", &c) == 1 )
{
   // Use c.
}

注意,在这两种情况下,使用intchar作为c的类型。

票数 1
EN

Stack Overflow用户

发布于 2016-02-11 07:35:16

好吧,我真的想通了!我猜当scanf完成从输入的读取时,它会返回一个< 0的整数,所以!= -1并不总是有效的,因为它不会特别返回-1。

参考: ben glasser在这篇文章上的回答:scanf() in while loop not terminating?

票数 0
EN

Stack Overflow用户

发布于 2016-02-11 12:31:12

成功完成scanf函数后,它将是一个非零值(value>0)。如果出现任何问题,那么它将返回0,我认为在任何情况下,你都不会得到-1,所以如果你想终止循环,你可以提示用户给出一个特殊的字符,表示input.Or的结束,如果你是从文件中读取它,那么你可以使用EOF来终止循环。

希望您会喜欢这个解决方案...

如果任何人发现我的答案中有任何错误,请在下面进行评论。我将非常感谢他。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35327689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档