代码解决方案生成成功,但运行不了。
#include
#include
#include
#define Stack_Size 100
#define TRUE 1
#define FALSE 0
typedef char StackElementType;
typedef struct {
StackElementType elem[Stack_Size];
int top;
}SeqStack;
//初始化顺序栈
void InitStack(SeqStack* S) {
//S = (SeqStack*)malloc(sizeof(SeqStack));
S->top = -1;
}
//判满
int Judge_full(SeqStack S) {
if (S.top == (Stack_Size - 1)) {
return 1;
}
else {
return 0;
}
}
//判空
int Judge_empty(SeqStack S) {
if (S.top == -1) {
return 1;
}
else {
return 0;
}
}
//进栈
int Push(SeqStack* S, StackElementType x) {
if (S->top == Stack_Size - 1) return FALSE;
S->top++;
S->elem[S->top] = x;
return TRUE;
}
//出栈
int Pop(SeqStack* S, StackElementType* x) {
if (S->top == -1) {
return FALSE;
}
else {
*x = S->elem[S->top];
S->top--;
return TRUE;
}
}
//读栈顶元素
int GetTop(SeqStack S, StackElementType* x) {
if (S.top == -1) {
return FALSE;
}
else {
*x = S.elem[S.top];
return TRUE;
}
}
//判断
void Judge(int result) {
if (result == 1) {
printf("成功!\n");
}
else {
printf("失败!\n");
}
}
//字符判断
int Match(char a, char b) {
if (strcmp(&a, &b) == 0) {
return 1;
}
else {
return 0;
}
}
void BracketMatch(char* str) {
SeqStack S;
int i;
char ch;
InitStack(&S);
for (i = 0; str[i] != '\0'; i++) {
switch (str[i]) {
case '(':
case '[':
case '{':
Push(&S, str[i]);
break;
case ')':
case']':
case'}':
if (Judge_empty(S)) {
printf("\n右括号多余!");
return;
}
else {
GetTop(S, &ch);
if (Match(ch, str[i]))
Pop(&S, &ch);
else {
printf("\n对应的左右括号不同类!");
return;
}
}
}
}
if (Judge_empty(S)) {
printf("\n括号匹配!");
}
else {
printf("\n左括号多余!");
}
}
int main() {
char str[Stack_Size];
printf("请输入字符串:");
scanf_s("%s", &str);
BracketMatch(str);
return 0;
}
scanf_s("%s", &str);
->
scanf_s("%s", &str, Stack_Size -1);
#define _CRT_SECURE_NO_WARNINGS //防止sancf报安全性错误
#include<time.h>//time()函数头文件
#include<stdlib.h>//rand(),srand()函数头文件
#include<stdio.h>//printf(),scanf()函数头文件
void menu()//进入游戏对菜单的打印
{
printf("***************************\n");
printf("******** 1. play **********\n");
printf("******** 0. exit **********\n");
printf("***************************\n");
}
int main()
{
int input = 0;//定义一个变量input,存放用户输入的值
do
{ //函数可以简单理解为对一段代码的封装。
menu();//这是菜单的打印,利用函数可以避免主函数过于冗长
printf("请选择(1/0):>");//让用户输入1开始玩游戏,0则退出游戏
scanf("%d", &input);
switch (input)
{
case 1:
game();//游戏具体实现
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误\n");
}
} while (input);//0为假,非0为真,真则会重新进入循环体,假则会退出循环体
return 0;
}
然后就是对游戏具体实现的思考,首先我们要生成一个随机数,现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数,它们就是rand()和srand()函数。
void game()
{
srand((unsigned int)time(NULL));//为rand()函数重新“播种”,使得rand()产生随机值(rand()产生的随机值我们称为“种子”)发生变化 (具体我们在第二节详细解释)
int ret = rand()%100+1;//生成的随机值1-100
int guess = 0;
while (1)
{
printf("请猜数字:>");
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("猜对了\n");
break;
}
}
}
但实际上我们不太喜欢将rand()和srand()函数放得太近,因为这样子反复运行程序还是容易使得rand()函数产生相近的值,所以我们比较提倡将srand()函数放到主函数中,事实上每次用到rand()函数只需要srand()函数“播种”一次即可。接下来展示就是猜数字游戏所示全部代码:
#define _CRT_SECURE_NO_WARNINGS //防止sancf报安全性错误
#include<time.h>//time()函数头文件
#include<stdlib.h>//rand(),srand()函数头文件
#include<stdio.h>//printf(),scanf()函数头文件
void game()
{
int ret = rand()%100+1;//生成的随机值1-100
int guess = 0;
while (1)
{
printf("请猜数字:>");
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("猜对了\n");
break;
}
}
}
void menu()//进入游戏对菜单的打印
{
printf("***************************\n");
printf("******** 1. play **********\n");
printf("******** 0. exit **********\n");
printf("***************************\n");
}
int main()
{
int input = 0;//定义一个变量input,存放用户输入的值
srand((unsigned int)time(NULL));//为rand()函数重新“播种”,使得rand()产生随机值(rand()产生的随机值我们称为“种子”)发生变化 (具体我们在第二节详细解释)
do
{ //函数可以简单理解为对一段代码的封装。
menu();//这是菜单的打印,利用函数可以避免主函数过于冗长
printf("请选择(1/0):>");//让用户输入1开始玩游戏,0则退出游戏
scanf("%d", &input);
switch (input)
{
case 1:
game();//游戏具体实现
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误\n");
}
} while (input);//0为假,非0为真,真则会重新进入循环体,假则会退出循环体
return 0;
}
代码运行截图: