我想让scanf只接受一个字符,但我不熟悉这样做的方法。任何人都可以帮助我。
这是我目前的代码:
void push(S *stack){
char e;
S temp;
temp=malloc(sizeof(struct stack));
if(!temp){
printf("Failed\n");
return;
}
printf("Input value: \n");
scanf(" %c", &e);
if(('a'<=e && e<= 'z') || ('A'<=e && e<= 'Z')){
temp->data=e;
if(*stack == NULL){
temp->next = temp->prev = NULL;
*stack=temp;
} else {
temp->next = *stack;
(*stack)->prev = temp;
temp->prev = NULL;
*stack=temp;
}
printf("Success %c", e);
}else{
printf("Failed %c", e);
}
}
忘记提及:
如果我要输入&#34; abc&#34;它将作为a,b和c在堆栈中推送。虽然它是正确的我希望有一种方法来取消输入,只有接受它,如果它只有一个字符,如果这当然可能吗?如果没有那么我会坚持当前的,只是希望更好的实施。谢谢
答案 0 :(得分:1)
在scanf
scanf(" %c",&e);
getchar();
在您输入字符后按Enter键时,getchar
会读取新行。希望这会有所帮助。
答案 1 :(得分:1)
试试这个:
int ch;
...
printf("Input value: \n");
scanf(" %c", &e);
while( (ch = getchar()) != '\n' && ch != EOF); // To eat up all the characters left behind by scanf call including '\n'.
scanf
会将您输入的第一个字符读取到e
。缓冲区中留下的其余字符将由ch
循环中的getchar
逐个读取到while
,直到它显示为\n
。当它读取\n
时,条件变为false
并且循环终止。现在你的缓冲区是空的。
答案 2 :(得分:1)
如果您不希望自己的程序在输入字符后等待输入,请使用getch()
中定义的<conio.h>
c = getch();