为什么程序执行一半就不执行了呢?

zxywd 2010-04-02 08:51:13
大家好!我遇到了一个问题,程序执行了一部分就不执行了。代码如下:
stud-mysql.c

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <mysql/mysql.h>
#include <syslog.h>

MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
MYSQL_FIELD *fields;

int main()
{
char *host="localhost";
char *user=malloc(30);
char *password=malloc(30);
char *db=NULL;
char answer;
unsigned int i;
unsigned int num_fields;
int m,n;
printf("请先登录!\n");
login:
printf("请输入用户名:\n");
scanf("%s",user);
printf("请输入密码:\n");
scanf("%s",password);
if(mysql_init(&mysql)==NULL)
{
printf("初始化MySQL数据库错误!\n");
return -1;
}
if(mysql_real_connect(&mysql,host,user,password,db,0,NULL,0)==NULL)
{
printf("连接MySQL数据库错误:%s!",mysql_error(&mysql));
printf("想重新登录吗?输入y/Y确认\n");
scanf("%c",&answer);
if(answer=='y'||answer=='Y')
goto login;
else return -1;
}
}
else printf("登录成功!请进行下一步操作。\n");
return 0;
}
执行结果:
请先登录!
请输入用户名:
sdfsdfs
请输入密码:
sdfsfds
连接MySQL数据库错误:Access denied for user 'sdfsdfs'@'localhost' (using password: YES)!想重新登录吗?输入y/Y确认
到这一步后scanf("%c",&answer);不执行了。我想重新登录也不行。我把else return -1;中的else去掉也不行,把这行代码注释掉也不行。这是怎么回事?麻烦各位帮忙解决一下。
...全文
410 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcchriszhao 2010-04-02
  • 打赏
  • 举报
回复
楼上各位大侠说的很明白,学习了
huanmie_09 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zxywd 的回复:]
我试了一下添加fflush(stdin);不起作用。将这句scanf("%c",&answer);改为scanf(" %c",&answer);
%前面多一个空格;倒是可以。为什么fflush(stdin);不起作用。
[/Quote]
没遇到过这种问题,理论上来说也不应该会出现这种问题。
zxywd 2010-04-02
  • 打赏
  • 举报
回复
忘了向各位说声谢谢。谢谢大家。
zxywd 2010-04-02
  • 打赏
  • 举报
回复
我试了一下添加fflush(stdin);不起作用。将这句scanf("%c",&answer);改为scanf(" %c",&answer);
%前面多一个空格;倒是可以。为什么fflush(stdin);不起作用。
huanmie_09 2010-04-02
  • 打赏
  • 举报
回复
这是因为你输入密码后,键盘缓冲区里还留有一个回车符。
到这里的时候scanf("%c",&answer);该函数不接受键盘输入,而是直接匹配到键盘缓冲区里的回车符,所以就退出了

selooloo 2010-04-02
  • 打赏
  • 举报
回复
login:
printf("请输入用户名:\n");
scanf("%s",user);
printf("请输入密码:\n");
scanf("%s",password);
fflush(stdin);//刷新缓冲区
if(mysql_init(&mysql)==NULL)
{
printf("初始化MySQL数据库错误!\n");
//return -1;
}
huanmie_09 2010-04-02
  • 打赏
  • 举报
回复
将这句scanf("%c",&answer);改为scanf(" %c",&answer);
%前面多一个空格;
或者在scanf("%c",&answer);前面添加一句fflush(stdin);
wuyu637 2010-04-02
  • 打赏
  • 举报
回复
fflush(stdin);
scanf("%c",&answer);
zxywd 2010-04-02
  • 打赏
  • 举报
回复
不好意思,刚才说错了,是getchar()不是getch()。
zxywd 2010-04-02
  • 打赏
  • 举报
回复
在linux下fflush(stdin)不起作用。在linux可以用getch()把这个问题解决。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧