首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

(C语言)循环里用switch的有关问题。

2012-04-01 
(C语言)循环里用switch的问题。。。。#includestdio.h#includestring.h#includestdlib.hvoid welcome(){

(C语言)循环里用switch的问题。。。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void welcome()
{
int i;
for(i=0;i<=27;i++)
putchar(' ');
  for(i=0;i<=22;i++)
printf("*");
putchar('\n');
for(i=0;i<=35;i++)
putchar(' ');
printf("WELCOME");
putchar('\n');
for(i=0;i<=35;i++)
putchar(' ');
printf("Y(^_^)Y");
putchar('\n');
for(i=0;i<=27;i++)
putchar(' ');
for(i=0;i<=22;i++)
printf("*");
putchar('\n');
}

void login()
{
FILE *p;
int i,j;
char name[20],password[12],n[12];
 for(j=1;j==1;)
 {
  printf("请输入您的用户名和密码:\n");
  printf("用户名:");
  scanf("%s",name);
  printf("密码:");
  scanf("%s",password);
  if((p=fopen(name,"r"))==NULL)
  {
printf("警告:用户名不存在哦!\n");
  }
  else
  {
  for(i=0;(n[i]=fgetc(p))!=EOF;i++);
  n[i]='\0';
  if(strcmp(n,password)!=0)
printf("警告:密码错误啦!\n");
  else
{
j=0;
printf("提示:恭喜您,登陆成功!");
}
  }
  putchar('\n');
 }
fclose(p);
}

void createuser()
{
FILE *p1;
char name[20],password[12],*str;
str=password;
printf("请输入您要创建的用户名和密码:\n");
printf("(提示:用户名总字符不得超过5个,密码不能超过11个字符,用户名和密码不能由空格组成哦)\n");
 printf("用户名:");
 scanf("%s",name);
 printf("密码:");
 scanf("%s",password);  
 if((p1=fopen(name,"w"))==NULL) //以用户名为文件名创建文件
 {
printf("警告:创建文件失败(⊙o⊙)!\n");
  exit(0);
 }
 fputs(str,p1); //把密码写入到刚创建的文件中去
 printf("提示:恭喜您,新用户创建成功o(∩_∩)o\n");
 fclose(p1);
}

void select1() //登陆、创建新用户和修改密码的选择
{
char min;
 do
 {
 printf(" 1:登陆 ");
 printf("2:创建新用户 ");
 printf("3:修改密码 ");
 printf("4:退出程序\n");
 printf("请输入要执行的命令代码(提示:比如要登陆,就输入“1”):");
  scanf("%c",&min);
  putchar('\n');
  switch(min)
  {
  case '1':login();break;
  case '2':createuser();break;
  //case '3':change();break;
  case '4':exit(0);break;
  default:printf("警告:指令不存在!");
  }
  putchar('\n');
 }while(min!='1');
}

int main()
{
welcome();
select1();
return 0;
}

代码在上面了,虽然有点长,但是我的问题只出在select1这个函数上,因为我输入2,创建完新用户后,我本来是想它再运行一次让我再选择的,但是结果我发现它运行了两次再给我选择,小弟实在不明白我那代码的问题出在哪了?为什它还要循环多一次而且不让我输入,第二次才能选择,求高人指点。。。。

[解决办法]
刚刚调试了一下,在最后那个putchar('\n');后加上一个getchar();是可以的。
[解决办法]
// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
/*#include <stdio.h>

int main(int argc, char* argv[])
{
int i = 0;
unsigned int sum = 0;
for (; i < 16; i++)
sum = sum + (1U<<i);
printf("%x",sum);
getchar();
return 0;
}
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void welcome()
{
int i;
for(i=0;i<=27;i++)
putchar(' ');
for(i=0;i<=22;i++)
printf("*");


putchar('\n');
for(i=0;i<=35;i++)
putchar(' ');
printf("WELCOME");
putchar('\n');
for(i=0;i<=35;i++)
putchar(' ');
printf("Y(^_^)Y");
putchar('\n');
for(i=0;i<=27;i++)
putchar(' ');
for(i=0;i<=22;i++)
printf("*");
putchar('\n');
}

void login()
{
FILE *p;
int i,j;
char name[20],password[12],n[12];
 for(j=1;j==1;)
 {
printf("请输入您的用户名和密码:\n");
printf("用户名:");
scanf("%s",name);
printf("密码:");
scanf("%s",password);
if((p=fopen(name,"r"))==NULL)
{
printf("警告:用户名不存在哦!\n");
}
else
{
for(i=0;(n[i]=fgetc(p))!=EOF;i++);
n[i]='\0';
if(strcmp(n,password)!=0)
printf("警告:密码错误啦!\n");
else
{
j=0;
printf("提示:恭喜您,登陆成功!");
}
}
putchar('\n');
 }
fclose(p);
}

void createuser()
{
FILE *p1;
char name[20],password[12],*str;
str=password;
printf("请输入您要创建的用户名和密码:\n");
printf("(提示:用户名总字符不得超过5个,密码不能超过11个字符,用户名和密码不能由空格组成哦)\n");
 printf("用户名:");
 scanf("%s",name);
 printf("密码:");
 scanf("%s",password);
 if((p1=fopen(name,"w"))==NULL) //以用户名为文件名创建文件
 {
printf("警告:创建文件失败(⊙o⊙)!\n");
exit(0);
 }
 fputs(str,p1); //把密码写入到刚创建的文件中去
 printf("提示:恭喜您,新用户创建成功o(∩_∩)o\n");
 fclose(p1);
}

void select1() //登陆、创建新用户和修改密码的选择
{
char min;
 do
 {
 printf(" 1:登陆 ");
 printf("2:创建新用户 ");
 printf("3:修改密码 ");
 printf("4:退出程序\n");
 printf("请输入要执行的命令代码(提示:比如要登陆,就输入“1”):");
 fflush(stdin);
scanf("%c",&min);
//min = getchar();
putchar('\n');
switch(min)
{
case '1':login();break;
case '2':createuser();break;
//case '3':change();break;
case '4':exit(0);break;
default:printf("警告:指令不存在!");
}
putchar('\n');
 }while(min!='1');
}

int main()
{
welcome();
select1();
return 0;
}

可以这样写,没怎么改你的代码,主要是由于你在执行scanf函数之前没有进行fflush,导致第二次的时候将之前的回车作为了一个符号传给了scanf~~~
[解决办法]

探讨

能解释一下吗?引用:

给你一个建议,也是我们当时做实训导师给我的建议,就是在用到scanf("%d",&amp;amp;a)的时候这样写

scanf(" %d",&amp;amp;a); %d前面加一个空格,这样就不会有问题了,这个方法用到你的程序里,你遇到的问题就解决了

热点排行