#include <stdio.h>
#define MAX 5
int stk[MAX];
int top=-1;
main()
{
char ch;
void push();
void pop();
void display();
do
{
printf("1. Push\n");
printf("2. Pop\n");
printf("3. Display\n");
ch=getchar();
if(ch=='1')
push();
if(ch=='2')
pop();
if(ch=='3')
display();
printf("Do u want to continue y/n");
ch=getchar();
}while(ch=='y'||ch=='Y');
}
void push()
{
}
void pop()
{
}
void display()
{
}
我完成推送操作的那一刻...程序打印“”你想继续y / n“并退出....不等待用户输入”“y / Y”
请帮忙
答案 0 :(得分:8)
\n
)。getchar()
一次,从缓冲区中读取该换行符,该换行符已分配给ch
且不等于'y'
或'Y'
,因此您的循环退出至于解决这个问题,这是留给你的练习。除了单独的getchar()
之外,你可以考虑使用其他数据读取方法。有关某些输入函数,请参阅here(提示:fgets
)。您还可以尝试从缓冲区中提取此字符并将其丢弃,以便后续调用getchar()
按预期工作。
如果这是针对学校的,那么您可能需要编写一个可以在整个课程中重复使用的功能。通过这种方式,您可以对其进行调试,并熟悉其工作原理。
祝你好运!答案 1 :(得分:5)
这是因为,当您输入1后跟RETURN
键时,两个字符将放入缓冲区(1
和newline
)。
然后第二个newline
会选择getchar()
,因为它既不是Y
也不是y
,它会退出。
快速解决问题(但是很糟糕):在getchar();
之前添加另一个printf
。
如果您想要更强大的用户输入,请参阅here,here或使用我的武器库中的近防弹代码:
#include <stdio.h>
#include <string.h>
#define OK 0
#define NO_INPUT 1
#define TOO_LONG 2
static int getLine (char *prmpt, char *buff, size_t sz) {
int ch, extra;
// Get line with buffer overrun protection.
if (prmpt != NULL) {
printf ("%s", prmpt);
fflush (stdout);
}
if (fgets (buff, sz, stdin) == NULL)
return NO_INPUT;
// If it was too long, there'll be no newline. In that case, we flush
// to end of line so that excess doesn't affect the next call.
if (buff[strlen(buff)-1] != '\n') {
extra = 0;
while (((ch = getchar()) != '\n') && (ch != EOF))
extra = 1;
return (extra == 1) ? TOO_LONG : OK;
}
// Otherwise remove newline and give string back to caller.
buff[strlen(buff)-1] = '\0';
return OK;
}
// Test program for getLine().
int main (void) {
int rc;
char buff[10];
rc = getLine ("Enter string> ", buff, sizeof(buff));
if (rc == NO_INPUT) {
// Extra NL since my system doesn't output that on EOF.
printf ("\nNo input\n");
return 1;
}
if (rc == TOO_LONG) {
printf ("Input too long [%s]\n", buff);
return 1;
}
printf ("OK [%s]\n", buff);
return 0;
}
这是一个测试运行:
$ ./tstprg
Enter string>[CTRL-D]
No input
$ ./tstprg
Enter string> a
OK [a]
$ ./tstprg
Enter string> hello
OK [hello]
$ ./tstprg
Enter string> hello there
Input too long [hello the]
$ ./tstprg
Enter string> I am pax
OK [I am pax]
你可能还想充实你的push
,pop
和display
功能:-)开个玩笑。我假设这是你的下一步。
顺便说一句,如果这个是作业,我建议不要把上面的代码作为你自己的工作。你几乎肯定会被当作作弊,因为它最有可能超出你目前接受的教育水平,并且可通过简单的网络搜索获得:输入
rc = getLine ("Enter string> ", buff, sizeof(buff));
进入您友好的邻居Google搜索框以查找。
答案 2 :(得分:0)
要注意的小事。 getChar返回int而不是char。这可能会导致各种混乱和意外问题,因为类型可能会有不同的大小。