奇怪的c问题,运行scanf不能取得正确的值,但调试时可以。
有问题的一行,在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);}}