user-0 提问: 新手学着玩，求指导。

回复:
user: user-1
content: 表面上看这段程序是没有错的，也可以运行，但运行过程中到 第二个scanf输入值给ch2时，程序并不会停止下来等待你输入，而是直接运行到最后一个printf ！  为什么？当时百思不得其解。。。  今天上网查了下才知道，原来scanf是从标准输入缓冲区中读取输入的数据，而%c的字符输入格式会接收回车字符，在输入第一个scanf时输入字符后按回车结束，输入缓冲中保存了这个回车符，遇到第二个scanf时，它自动把这个回车符赋给了ch2 。而如果第二个scanf的输入格式不是%c时，由于格式不匹配，这个回车符会被自动忽略，所以只有在连续输入两个%c的格式时才会出现这样的问题！  解决办法：(二办法任选其一)  1、清空输入缓冲区  第一个scanf后加入语句：fflush(stdin); //C语言清空输入缓冲区函数  2、格式控制中加入空格  将第二个scanf改为：scanf(" %c",&ch2);//在%号前面加一个空格  scanf格式输入时要求输入格式与格式控制符中的完全一样(如：scanf("abcd%c",&ch);输入时必须输入abcde,ch得到的值为e)空格可以抵消前面输入的回车符。 网上找的，足够解决问题了

user: user-2
content: flush(stdin)刷新标准输入缓冲区，把输入缓冲区里的东西丢弃 fflush(stdout)刷新标准输出缓冲区，把输出缓冲区里的东西打印到标准输出设备上。 你打完Y或者N之后缓冲区里还有个回车在 把flush(stdin)放在你的scanf("%c",&a);后试试

user: user-3
content: if (a == 89) { printf("减肥的第%d天\n", i); i++; } for里的i++删了

user: user-4
content: >schtasks /?  SCHTASKS /parameter [arguments]  描述:     允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任     务。替代 AT.exe。  参数列表:     /Create         创建新计划任务。      /Delete         删除计划任务。      /Query          显示所有计划任务。      /Change         更改计划任务属性。      /Run            立即运行计划任务。      /End            中止当前正在运行的计划任务。      /?              显示帮助消息。  示例:     SCHTASKS     SCHTASKS /?     SCHTASKS /Run /?     SCHTASKS /End /?     SCHTASKS /Create /?     SCHTASKS /Delete /?     SCHTASKS /Query  /?     SCHTASKS /Change /?  C:\>schtasks /create /?  SCHTASKS /Create [/S system [/U username [/P [password]]]]     [/RU username [/RP password]] /SC schedule [/MO modifier] [/D day]     [/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime]     [/RI interval] [ {/ET endtime | /DU duration} [/K] ]     [/SD startdate] [/ED enddate] [/IT] [/Z] [/F]  描述:     允许管理员在本地或远程系统上创建计划任务。  参数列表:     /S           system            指定要连接到的远程系统。如果省略这个                                    系统参数，默认是本地系统。      /U           username          指定命令执行的用户上下文。      /P           [password]        指定给定用户上下文的密码。如果省略则                                    提示输入。      /RU          username          指定任务在其下运行的“运行方式”用户                                    帐户(用户上下文)。对于系统帐户，有效                                    值是 ""、"NT AUTHORITY\SYSTEM" 或                                    "SYSTEM"。      /RP          [password]        指定“运行方式”用户的密码。要提示输                                    入密码，值必须是 "*" 或无。系统帐户                                    会忽略该密码。      /SC          schedule          指定计划频率。                                    有效计划任务: MINUTE, HOURLY,                                    DAILY, WEEKLY, MONTHLY, ONCE,                                    ONSTART, ONLOGON, ONIDLE.      /MO          modifier          改进计划类型以允许更好地控制计划重复                                    周期。有效值列于下面“修改者”部分中。      /D           days              指定该周内运行任务的日期。有效值:                                    MON, TUE,WED, THU, FRI, SAT, SUN                                    和对 MONTHLY 计划的 1 - 31                                    (某月中的日期)。通配符“*”指定所有                                    日期。      /M           months            指定一年内的某月。默认是该月的第一天。                                    有效值: JAN, FEB, MAR, APR, MAY, JUN,                                    JUL, AUG, SEP, OCT, NOV, DEC。通配符                                    “*” 指定所有的月。      /I           idletime          指定运行一个已计划的 ONIDLE 任务之前                                    要等待的空闲时间。                                    有效值范围: 1 到 999 分钟。      /TN          taskname          指定唯一识别这个计划任务的名称。      /TR          taskrun           指定在这个计划时间运行的程序的路径                                    和文件名。                                    例如: C:\windows\system32\calc.exe      /ST          starttime         指定运行这个任务的开始时间。时间格式                                    是 HH:mm (24 小时时间) 例如 14:30 为                                    2:30 PM。默认到当前时间。      /RI          interval          用分钟指定重复间隔。这无法应用于                                    已计划的类型: MINUTE, HOURLY,                                    ONSTART, ONLOGON, ONIDLE。                                    有效范围: 1 - 599940 分钟。                                    如果指定了 /ET 或 /DU，它会默认到                                    10 分钟。      /ET          endtime           指定运行任务的结束时间。                                    时间格式是 HH:mm (24 小时时间)                                    例如 14:50 为 2:50 PM。这无法运用于                                    计划类型: ONSTART, ONLOGON, ONIDLE。      /DU          duration          指定运行此任务的持续时间。                                    时间格式是 HHHH:mm。                                    这不适用于 /ET 和计划类型: ONSTART，                                     ONLOGON, ONIDLE。如果指定了 /RI，                                    那么默认为 1 小时。      /K                             在结束时间或持续时间终止此任务。                                    这不适用于计划类型: ONSTART,                                    ONLOGON, ONIDLE。必须指定 /ET                                    或 /DU。      /SD          startdate         指定第一次运行这个                                    任务的日期。格式是 yyyy/mm/dd。                                    默认为当前时间。这不适用于计划                                    类型: ONCE, ONSTART, ONLOGON,                                    ONIDLE.      /ED          enddate           指定此任务运行的最后一天的日期。                                    格式是 yyyy/mm/dd。                                    这不适用于计划类型: ONCE, ONSTART,                                    ONLOGON, ONIDLE。      /IT                            /RU 用户在此作业运行时登录才启                                    用此任务用交互方式运行。                                    用户登录后此任务才运行。      /Z                             如果此任务没有计划再次运行，                                    会删除此任务。      /F                             如果指定的任务已经存在，强行                                    创建此任务并不显示警告。      /?                             显示该帮助消息。  修改者: 按计划类型的 /MO 开关的有效值:     MINUTE:  1 到 1439 分钟。     HOURLY:  1 到 23 小时。     DAILY:   1 到 365 天。     WEEKLY:  1 到 52 周。     ONCE:    无修改者。     ONSTART: 无修改者。     ONLOGON: 无修改者。     ONIDLE:  无修改者。     MONTHLY: 1 到 12，或              FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY。  示例:     ==> 在远程机器 "ABC" 上创建计划任务 "doc"，         该机器每小时在 "runasuser" 用户下运行 notepad.exe。          SCHTASKS /Create /S ABC /U user /P password /RU runasuser                  /RP runaspassword /SC HOURLY /TN doc /TR notepad      ==> 在远程机器 "ABC" 上创建计划任务 "accountant"，         在指定的开始日期和结束日期之间的开始时间和结束时间内，         每隔五分钟运行 calc.exe。          SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE                  /MO 5 /TN accountant /TR calc.exe /ST 12:00 /ET 14:00                  /SD 2002/12/30 /ED 2002/12/30 /RU runasuser /RP      ==> 创建计划任务 "gametime"，在每月的第一个星期天         运行“空当接龙”。          SCHTASKS /Create /SC MONTHLY /MO first /D SUN /TN gametime                  /TR c:\windows\system32\freecell      ==> 在远程机器 "ABC" 创建计划任务 "report"，         每个星期运行 notepad.exe。          SCHTASKS /Create /S ABC /U user /P password /RU runasuser                  /RP runaspassword /SC WEEKLY /TN report /TR notepad.exe      ==> 在远程机器 "ABC" 创建计划任务 "logtracker"，         每隔五分钟从指定的开始时间到无结束时间，         运行 notepad.exe。将提示输入 /RP         密码。          SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE                  /MO 5 /TN logtracker                  /TR c:\windows\system32\notepad.exe /ST 18:30                  /RU runasuser /RP      ==> 创建计划任务 "gaming"，每天从 12:00 点开始到         14:00 点自动结束，运行 freecell.exe。          SCHTASKS /Create /SC HOURLY /TN gaming /TR c:\freecell /ST 12:00                  /ET 14:00 /K

user: user-5
content: 引用 4 楼 zhao4zhong1 的回复:在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。  赵老师,帮个忙啊.. 我想问一下 您之前的那个计划任务创建命令不会 哎... 有没有c++的源代码 或者 windows的API 在那任务设置中 我无法更改过了计划任务时间,就立即启动 不能更改 求教  还有队DOS命令不是很清楚,看过您之前的回帖,都是用DOC命令搞得

user: user-6
content: #include <stdio.h> #include <stdlib.h>  int main() {     for (int i = 1;; i++)     {         printf("今天吃晚饭了吗?(请输入Y/N)");         char a;         scanf("%c",&a);         getchar();    //接收上次输入残留在输入缓冲区里的换行符         if (a == 89)         {             printf("减肥的第%d天\n", i);         }         else if (a == 78)         {             printf("我是死胖子！\n");         }         else         {             printf("输入错误\n");         }           //system("pause");     } }

user: user-0
content: 非常感谢楼上所有的朋友！赵4老师 您的方法有效，厉害啦~~

user: user-4
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 char c; scanf("%c",&c); //时，都改为 char s[2]; char c; scanf("%1s",s); c=s[0]; //自动跳过一个或多个空格或Tab字符或回车换行，读取下一个字符。