C 语言: Scanf 函数(50分)

  • 主题发起人 主题发起人 zwhc
  • 开始时间 开始时间
Z

zwhc

Unregistered / Unconfirmed
GUEST, unregistred user!
如下的猜数程序有个 bug: 如果输入的数据为字符,将陷入死循环
如何让程序可运行?
===============================================================
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int magic;
/* magic number */
int guess;
/* user's guess */
magic = rand();
/* get a random number */
printf("Guess the magic number: ");
for(guess=0;
guess!=magic;) {
if (scanf("%d", &amp;guess) ==0 ) continue;
printf("%d", guess);
/* guess = gets(stdin);
*/
if (guess == magic) {
printf("** Right **");
printf(" %d is the magic number/n", magic);
}
else
{
printf("Wrong, ");
if(guess > magic) printf("too high/n");
/* nested if */
else
printf("too low/n");
}
}
return 0;
}
 
for(guess=0;
guess!=magic;) {
if (scanf("%d", &amp;guess) ==0 ) continue
else
guess==magic
 
对不起,不能这样
其实这样问题就在于 scanf 函数的使用
==============================================
我很少用 C,希望有人能提个醒
 
char string[100],*stopstring;

if (scanf("%s", string) ==0 ) continue;
guess=strtol(string,&amp;stopstring,10);
就ok了/另外,你没有设置rand的种子,每次产生的rand都一样
 
把输入的字符串转换成ascii码就可以了。
 
问题的产生在于输入字符以后再敲入回车键,如何对这个回车键进行处理,
因为下一轮循环时,回车键将首先被当作输入的字符进行处理,当然会产生死循环
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int magic;
/* magic number */
int guess;
/* user's guess */
char c;
/*用来接受输入的字符或回车键*/
magic = rand();
/* get a random number */
printf("Guess the magic number: ");
for(guess=0;
guess!=magic;)
{
if (scanf("%d", &amp;guess)==0)
{ while(c=getchar()!='/n') /*若输入的是字符或字符串则将其全部赋给字符变量C*/
printf("What you input is not digit!/nPlease input again!/n");
continue;
}
printf("%d", guess); /* guess = gets(stdin);
*/
if (guess == magic)
{
printf("** Right **");
printf(" %d is the magic number/n", magic);
}
else
{
printf("Wrong, ");
if(guess > magic) printf("too high/n");
/* nested if */
else
printf("too low/n");
}
}
return 0;
}
以上程序在WINDOWS2000+TC2.0环境下调试通过
 

Similar threads

I
回复
0
查看
516
import
I
I
回复
0
查看
658
import
I
I
回复
0
查看
843
import
I
I
回复
0
查看
932
import
I
后退
顶部