奇怪的c问题,运行scanf不能取得正确的值,但调试时可以。

anewindy 2003-10-19 09:22:16
有问题的一行,在input函数中。我需要读取一个字符,但用%c不行,一定要用%1s。
否则取到的是0~~~。该问题只在运行中出现,用vc。net单步执行能取的正确的值。但编译后不能正常运行。其他编译器也如此。
/*
Name: hanoi game
Copyright: anewindy
Author: anewindy
Date: 18-06-2003 16:34
Description: print the step to move the hanoi plants
*/
#include <stdio.h>
#include <stdlib.h>
#define NUM 1
#define CHARA 0
long int step_count=0;
void move(char source,char target);/*打印移动盘子的操作*/
void hanoi(int,char,char,char);
int input(char *note,int);/*输入即提示*/

int main()
{int num,wor;
long int temp;
char cont;
printf(" ☆这是汉诺塔游戏☆\n");
do{num=input("请输入你所想要移动的盘子总数::",NUM);
while(num>40)
{printf("晕死,你输入的盘子总数太多了,这一辈子都算不完!!\n");
wor=1;
if(num>temp)temp=num;
num=input("请重新输入,这次小一点(<40):",NUM);
}
hanoi(num,'A','B','C');
printf("\n总共走了%ld步",step_count);
step_count=0;
if (num>7)printf("\n看啊,那么多步,你想把你的电脑累死啊!下次输入小一点.");
if (wor==1){
printf("你刚才居然还移动%ld个,想想那是什么后果……汗ing",temp);
wor=temp=0; }
cont=input("\n还想再来一次吗?y/n:",CHARA);
}while(cont=='y');/*如果输入为Y,重复程序*/
return 0;
}

int input(char *note,int sign)
{int n;
char c;
for (;*note!='\0';note++)
printf("%c",*note);
if (sign==NUM)
{
scanf("%d",&n);
return n;}
else if (sign==CHARA){
scanf("%c",&c); //有问题的就是这一行,有问题的就是这一行,有问题的就是这一行
return c;}

}

void move(char source,char target)
{printf("%c===>%c ",source,target);
++step_count;
}

void hanoi(int n,char A,char B,char C)
{if(n==1)move (A,B);
else{hanoi(n-1,A,C,B);
move(A,C);
hanoi(n-1,B,A,C);}}
...全文
116 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
daizh 2003-10-21
  • 打赏
  • 举报
回复
使用scanf()会有个常见的问题,就是'\n'会留在输入流中,会被下一个从流中获取数的函数所捕获,所以要去掉'\n',用scanf(' %c',%d);在前面加个空格符' '就可以,因为空格符在scanf函数中也是一个分隔符。
BillTian213 2003-10-21
  • 打赏
  • 举报
回复
就是啊,为什么要有个' '呢?
anewindy 2003-10-21
  • 打赏
  • 举报
回复
自己顶
anewindy 2003-10-21
  • 打赏
  • 举报
回复
但为什么单步调试的时候能正常呢?
如果只是因为:
使用scanf()会有个常见的问题,就是'\n'会留在输入流中,会被下一个从流中获取数的函数所捕获,所以要去掉'\n',用scanf(' %c',%d);在前面加个空格符' '就可以,因为空格符在scanf函数中也是一个分隔符。
那么调试的时候也应该不正常``````````
但单步调试的时候正确的取到了'y'
fierygnu 2003-10-21
  • 打赏
  • 举报
回复
%c表示读入一个字符,包括空白字符。而%1s表示读入第一个非空白字符。
anewindy 2003-10-19
  • 打赏
  • 举报
回复
但为什么单步调试的时候能正常呢?
前面那个' '是哪来的呢?
daizh 2003-10-19
  • 打赏
  • 举报
回复
更正:scanf(" %c",&c);
daizh 2003-10-19
  • 打赏
  • 举报
回复
scanf("%c",&c); //有问题的就是这一行,有问题的就是这一行,有问题的就是这一行
将它改为scanf(" %c",%c);
|
注意这个地方
你仔细想想就知道为什么这么做了。

69,368

社区成员

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

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