Turbo C - Scanf只接受一个字符

时间:2014-01-20 12:33:22

标签: c turbo-c

我想让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在堆栈中推送。虽然它是正确的我希望有一种方法来取消输入,只有接受它,如果它只有一个字符,如果这当然可能吗?如果没有那么我会坚持当前的,只是希望更好的实施。谢谢

3 个答案:

答案 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();