前言
许多新手小白编写一个完整的程序执行后,每次只能运行一此。然后只能关闭程序窗口再次运行。这人我们非常苦恼。那么如何让我们的程序窗口多次执行呢?
一、一次完整程序运行。
我们用一个只能运行一次的程序来说明这种情况:
下面是一个电脑生成随机数(0—100)的一个代码:
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
int main(void)
{
srand((unsigned)time(NULL));
int x=rand()%100+1;
int i, n;
for(i=1;i<=7;i++){
printf("enter n:");
scanf("%d",&n);
if(n<x)
printf("小于目标数字\n");
else if(n>x)
printf("大于目标数字\n");
else{
printf("恭喜你,答对了!\n");
break;}
}
if(n!=x){
printf("猜戳了哦\n");
printf("正确答案是%d",x);
}
return 0;
}
当我们运行此代码玩游戏时程序只能执行一次,如下:
我们想再玩一次时不得不关闭程序窗口再次运行。下面小编将教大家如何让我们这个程序如何多次运行。
二、实现方法
1.使用while(1)和对代码的完善
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
int main(void)
{
while(1){
srand((unsigned)time(NULL));
int x=rand()%100+1;
int i, n;
for(i=1;i<=3;i++){
printf("enter n:");
scanf("%d",&n);
if(n<x)
printf("小于目标数字\n");
else if(n>x)
printf("大于目标数字\n");
else{
printf("恭喜你,答对了!\n");
break;}
}
if(n!=x){
printf("答错了!\n");
printf("正确答案是%d",x);
}
}
return 0;
}
我们直接使用while(1){
完整程序段} 这是我们发现程序可以循环执行了
但此时无法退出。我们期望输入 y/n让程序选择继续执行或退出。
2.调试与最后结果
scanf("%c",&c);
if(c=='y')
break;
}
在循环while最后我们读入一个字符y让程序结束
但此时多打印了while(1)循环中所有的printf()内容。
此时我们发现表达语句中存在问题,于是我们改变表达语句中的内容。
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
int main(void)
{
srand((unsigned)time(NULL));
int x=rand()%100+1;
int i, n;
char c;
while(1){
if(i<=3) {
for(i=1;i<=3;i++){
printf("enter n:");
scanf("%d",&n);
if(n<x)
printf("小于目标数字\n");
else if(n>x)
printf("大于目标数字\n");
else if(n==x){
printf("恭喜你,答对了!\n");
break;}
}
if(n!=x){
printf("答错了!\n");
printf("正确答案是%d\n",x);
}
printf("是否在玩一局?\n");
printf(" y or n:");
}
c=getchar();
if (c=='y')
i=1;
else if(c=='n')
return 0;
}
return 0;
在for循环之前我们加入了if判断语句当一次循环结束时防止一次循环结束时多打印printf()语句中的内容。在结尾我们使用getchar读入y/n判断是否结束程序,n则用return 0;强行跳出循环防止打印下面语句,y则重置i继续执行循环。
最终结果如下
最终我们完美的控制了程序的多次运行和结束。
补:由于程序已经运行开始产生的随机数不能再重置。这个难题就交给各位看官了。(实在懒得想了)
总结
使用while(1){程序段}即可在程序窗口多次运行完整的程序。由于while(1)循环的优先性在程序中的printf,scanf。等函数即使程序结束也会再次打印,这时我们需要在这些语句段中加入判断控制语句防止多次打印。最终我们使用return强行跳出函数不在打印输出,再将我们控制循环的语句等中的变量重置。一个完美的窗口多次使用程序就打印好了