我正在做一些简单的事情,但我似乎无法让它发挥作用。
基本上,我有main(),它基本上以两种不同的方式显示角色的显示方式。但是,我试着把它搞砸了一点,然后让它循环。我知道,我可以更容易地做到这一点,但只是试图让我的脚踏实地。
#include <stdio.h>
/* displays code number for a character*/
char Chat(void);
int main(void)
{
char ch, gr;
printf(" please enter a character.\n");
scanf("%c", &ch);
printf("The code for %c is%d. \n", ch, ch);
Chat(void);
if (gr == 'y')
main();
else
return 0;
}
/* this function should obtain the value of gr and then send it to main() so that main can avaluate if
it should run again*/
char Chat(void)
{
char gr;
printf(" press y for again, press n for instant death");
gr = getchar();
return gr;
}
我希望我想要做的事情是有道理的......我并不认为有必要将其击倒,因为我可能在......认真的人中留下了一些错字。
答案 0 :(得分:4)
一些指示:
- 使用小写字母启动函数名称。但这只是社区大多数人的惯例。
- 确保你总是在主要地方归还。
不是在main中调用
main();
(危险),而是使用do-while
循环,这样更好。<强> 4。在Chat(void)处传递void无效。
- 您没有在任何地方使用Chat(void)的返回值。
else
之前不需要return 0
。- 醇>
getchar()
吞下输入,例如用于输入先前输入的\n
字符。
swallow
导致程序在一次旋转中停止。我已更改您的代码并在下面添加。 do-while
版本在此下单独给出。
为了删除一些逻辑错误,很少有getchars添加到代码中,并且删除了Chat(void)以纠正编译器错误:
#include <stdio.h>
/* displays code number for a character*/
char Chat(void);
int main(void)
{
char ch, gr;
printf(" please enter a character.\n");
scanf("%c", &ch);
getchar(); //swallows newline
printf("The code for %c is %d. \n", ch, ch);
gr=Chat();
if (gr == 'y')
main(); // this is not a good idea....
return 0;
}
char Chat(void)
{
char gr;
printf(" press y for again, press n for instant death");
gr = getchar();
getchar(); // swallows newline
return gr;
}
编辑:这是代码的do-while
版本
#include <stdio.h>
/* displays code number for a character*/
char Chat(void);
int main(void)
{
char ch, gr;
do{
printf(" please enter a character.\n");
scanf("%c", &ch);
getchar(); //swallows newline
printf("The code for %c is %d. \n", ch, ch);
gr=Chat();
}while(gr=='y');
return 0;
}
char Chat(void)
{
char gr;
printf(" press y for again, press n for instant death");
gr = getchar();
getchar(); // swallows newline
return gr;
}