终止While循环扫描(“%c”,& ch)

时间:2016-02-10 22:59:56

标签: c while-loop scanf

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

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);
}

3 个答案:

答案 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来终止循环。

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

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