鱼C论坛

 找回密码
 立即注册
查看: 2789|回复: 3

求解决,输入字符即进入死循环。。。

[复制链接]
发表于 2012-2-14 00:06:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
定时关机小程序,用switch改写,一输入字符就进入死循环。怎么解决?我想到用itoa和atoi函数,把ASKII码 定死,不知道这样行不。请大家改下。。。

********************************************************************************

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//声明函数
void print_top(); //打印头标题
void close_cp();  //关闭computer
void result_cp(); //重启computer
void judge_num(); //判断输入的1,2,3,4序号
int num,seconds, minutes;
char string_seconds[5];
char close[] = "shutdown -s -t 0";      //shutdown为系统命令
char result[] = "shutdown -r -t 0";
void main()
{
      print_top();
      scanf("%d",&num);
      
      switch (num)
      {
      case 1: close_cp();break;
      case 2: result_cp();break;
      case 3: exit(-1);break;
      case 4: system("shutdown -a");break;
      default: judge_num();break;
      }
      
      system("pause");  //暂停屏幕   
}
void print_top()
{
      printf("\n");
      printf("*******************欢迎使用定时程序!******************\n");
      printf("\n         1、定时关机       2、定时重启\n\n         3、退出           4、取消定时\n\n");
      printf("******************************************************\n\n");
      printf("请选择序号:");   
}
void close_cp()
{
      printf("\n请输入关机时间(0~600分):");
      
      scanf("%d",&minutes);
      printf("\n");
      
      while ( minutes < 0 || minutes > 600 )
      {
            printf("输入时间错误,请重新输入:");
            scanf("%d",&minutes);
            printf("\n");     
      }
      
      seconds = minutes * 60;             //将输入的分钟转化为秒
      itoa(seconds, string_seconds, 10);  //将int型转换成string型  10 代表的十进制
      system(strcat(close,string_seconds));//stract函数拼接字符串
      
      printf("执行成功! %d分钟后,电脑将自动关闭...\n\n",minutes);
      printf("请及时保存相关的操作!关机计时中...\n\n");
}
void result_cp()
{
      printf("请输入重启时间(0~600分):");
      
      scanf("%d",&minutes);
      printf("\n");
      
      while ( minutes < 0 || minutes > 600 )
      {
            printf("输入时间错误,请重新输入:");
            scanf("%d",&minutes);
            printf("\n");     
      }
      
      seconds = minutes * 60;             //将输入的分钟转化为秒
      itoa(seconds, string_seconds, 10);  //将int型转换成string型  10 代表的十进制
      system(strcat(result,string_seconds));//stract函数拼接字符串
      
      printf("执行成功! %d分钟后,电脑将自动重启...\n\n",minutes);
      printf("请及时保存相关的操作!重启计时中...\n\n");
}
void judge_num()
{
      while(num!=1 && num!=2 && num!=3 && num!=4 )            
      {
            printf("输入序号错误,请重新输入:");
            scanf("%d",&num);      
      }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-14 12:05:17 | 显示全部楼层
    scanf("%d",&num);
要求输入整形,而你输入字符当然会出问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-14 12:15:54 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. //声明函数
  5. void print_top(); //打印头标题
  6. void close_cp();  //关闭computer
  7. void result_cp(); //重启computer
  8. void judge_num(); //判断输入的1,2,3,4序号
  9. int num,seconds, minutes;
  10. char string_seconds[5];
  11. char close[] = "shutdown -s -t 0";      //shutdown为系统命令
  12. char result[] = "shutdown -r -t 0";

  13. int main()
  14. {
  15.        print_top();
  16.        scanf("%d",&num);
  17.       
  18.        switch (num)
  19.        {
  20.        case 1: close_cp();break;
  21.        case 2: result_cp();break;
  22.        case 3: exit(-1);break;
  23.        case 4: system("shutdown -a");break;
  24.        default: judge_num();break;
  25.        }
  26.       
  27.        system("pause");  //暂停屏幕   
  28. }
  29. void print_top()
  30. {
  31.        printf("\n");
  32.        printf("*******************欢迎使用定时程序!******************\n");
  33.        printf("\n         1、定时关机       2、定时重启\n\n         3、退出           4、取消定时\n\n");
  34.        printf("******************************************************\n\n");
  35.        printf("请选择序号:");   
  36. }
  37. void close_cp()
  38. {
  39.        printf("\n请输入关机时间(0~600分):");
  40.       
  41.        scanf("%d",&minutes);
  42.        printf("\n");
  43.       
  44.        while ( minutes < 0 || minutes > 600 )
  45.        {
  46.              printf("输入时间错误,请重新输入:");
  47.              scanf("%d",&minutes);
  48.              printf("\n");     
  49.        }
  50.       
  51.        seconds = minutes * 60;             //将输入的分钟转化为秒
  52.        itoa(seconds, string_seconds, 10);  //将int型转换成string型  10 代表的十进制
  53.        system(strcat(close,string_seconds));//stract函数拼接字符串
  54.       
  55.        printf("执行成功! %d分钟后,电脑将自动关闭...\n\n",minutes);
  56.        printf("请及时保存相关的操作!关机计时中...\n\n");
  57. }
  58. void result_cp()
  59. {
  60.        printf("请输入重启时间(0~600分):");
  61.       
  62.        scanf("%d",&minutes);
  63.        printf("\n");
  64.       
  65.        while ( minutes < 0 || minutes > 600 )
  66.        {
  67.              printf("输入时间错误,请重新输入:");
  68.              scanf("%d",&minutes);
  69.              printf("\n");     
  70.        }
  71.       
  72.        seconds = minutes * 60;             //将输入的分钟转化为秒
  73.        itoa(seconds, string_seconds, 10);  //将int型转换成string型  10 代表的十进制
  74.        system(strcat(result,string_seconds));//stract函数拼接字符串
  75.       
  76.        printf("执行成功! %d分钟后,电脑将自动重启...\n\n",minutes);
  77.        printf("请及时保存相关的操作!重启计时中...\n\n");
  78. }
  79. void judge_num()
  80. {
  81.         printf("输入序号错误,请重新输入:");
  82.         scanf("%d",&num);      
  83. }
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-14 22:38:36 | 显示全部楼层
先给变量num赋初值,然后在scanf()后面加上getchar()函数获取输入字符(以下代码),就不会了运行错误了,最后检测num值是否改变判断是否正常输入。
  1. char ch;

  2. while ( '\n' != (ch = getchar()) )
  3. {
  4.         continue;
  5. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 18:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表