怎么把goto语句用其它语句代替?

问题描述:刚刚学的C语言,但是没有接触到goto语句,老师不允许程序中出现goto,请问应该怎么样修改,感谢大佬的帮助。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
void login(char *username,char*password);
void change_password(char *old_password);

int main(){
    char username[1000] = "asdf";
    char password[1000] = "123456";//username和password数组开这么大是为了避免操作指针的时候发生越界的问题
    int mod = 0;//设定一个变量mod,用来让用户选择系统工作的模式
    remake:
    printf("\n");
    printf("\t*******************************\n");
    printf("\t***** 请输入你要选择的模式 ******\n");
    printf("\t*********1.登录系统*************\n");
    printf("\t*********2.修改密码*************\n");
    printf("\t*********3.退出系统*************\n");
    printf("\t*******************************\n");
    printf("\n");

    scanf("%d",&mod);//读入用户的选择
    switch (mod){//使用switch来控制分支
        case 1:
            login(username,password);//向登录函数传入所给定的用户名和用户密码
            goto remake;
            break;
        case 2:
            change_password(password);
            goto remake;
            break;
        case 3:
            printf("\t再见,欢迎下次使用!");
            return 0;
        default:
            printf("\t输入错误,重新输入\n");
            goto remake;
            break;
    }
}

void login(char *username,char*password){//模块化程序设计的思路,这个是登录模块,单独来做个函数,传入的参数为主函数中给定的正确的用户名和密码

    char name[1000];
    char word[1000];
    int n;
    printf("\n");
    printf("\t*******************************\n");
    printf("\t********* 用户登录系统 *********\n");
    printf("\t*******************************\n");
    printf("\n\n");
    printf("\t请输入用户名.\n");
    printf("\t用户名:");
    scanf("%s",name);
    printf("\n");
    if( strcmp(username , name) == 0){
        printf("\t输入用户名.\n");
        printf("\t输入密码:");
        scanf("%s",word);
        for(n = 0; n < 5; n++){
            if( strcmp( password , word) == 0 ){
                printf("\n");
                printf("\t*******************************\n");
                printf("\t********* 欢迎用户! *********\n");
                printf("\t*********3.返回上一级界面*************\n");
                printf("\t*******************************\n");
                re:
                int flag = 1;
                scanf("%d",&flag);
                if(flag == 3){
                    return ;
                }else{
                    printf("\t******* 无效命令!请重新输入 ******\n");
                    goto re ;
                }
                printf("\n");
                break;
            }
            else
            {
                printf("\t\t请重试!\n");
                printf("\t密码:");
                scanf("%s",word);
                if( strcmp( password , word) == 0 )
                {
                    printf("\n");
                    printf("\t*******************************\n");
                    printf("\t********* 欢迎用户! *********\n");
                    printf("\t*********3.返回上一级界面*************\n");
                    printf("\t*******************************\n");
                    re1:
                    int flag = 1;
                    scanf("%d",&flag);
                    if(flag == 3){
                        return ;
                    }else{
                        printf("无效命令");
                        goto re1;
                    }
                    printf("\n");
                    break;
                }
            }
        }
    }

    else if( strcmp(username , name) != 0){
        printf("\t用户名错误! 请重新输入!\n");
    }
}

void change_password(char *old_password){
    char temp_mima[1000],temp_mima1[1000],temp_mima2[1000];//三个字符串密码,原始密码,新密码1,新密码2
    printf("请输入原来的密码:");
    loop:scanf("%s",temp_mima);
    while(1){
        if(strcmp(temp_mima,old_password)==0){
            printf("\n\n");
            printf("\t*******************************\n");
            printf("\t********* 密码正确! *********\n");
            printf("\t*******************************\n");
            printf("\t请输入新密码:\n");
            scanf("%s",temp_mima1);
            printf("\t请再次输入密码:\n");
            scanf("%s",temp_mima2);
            if(strcmp(temp_mima1,temp_mima2)==0){
                printf("\t*******************************\n");
                printf("\t*****修改密码正确!请牢记密码!******\n");
                printf("\t*******************************\n");
                printf("");
                strcpy(old_password,temp_mima1);//用新的密码代替旧的密码,
                return; //返回主函数
            }else{
                printf("\t*******************************\n");
                printf("\t***两次输入的密码不一致!修改失败!***\n");
                printf("\t*******************************\n");
                printf("\t请输入原来的密码::");
                goto loop; //实现用户输出错误密码了,重新输入密码 ,
                getch();
                return;
            }
        }
        else{
            printf("\t*******************************\n");
            printf("\t*********输入的密码错误!**********\n");
            printf("\t*******************************\n");
            printf("\t请输入原来的密码::");

            goto loop;
            getch();
            break;
        }
    }

}

原贴连接:怎么把goto语句换成其他的语句?-CSDN社区

我的回复:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
void login(char *username, char *password);
void change_password(char *old_password);

int main() {
	char username[1000] = "asdf";
	char password[1000] = "123456";//username和password数组开这么大是为了避免操作指针的时候发生越界的问题
	int mod = 0;//设定一个变量mod,用来让用户选择系统工作的模式

	while (1) { // 增加一个while循环
// remake: // 原式:去掉label
		printf("\n");
		printf("\t*******************************\n");
		printf("\t***** 请输入你要选择的模式 ******\n");
		printf("\t*********1.登录系统*************\n");
		printf("\t*********2.修改密码*************\n");
		printf("\t*********3.退出系统*************\n");
		printf("\t*******************************\n");
		printf("\n");

		scanf("%d", &mod); //读入用户的选择
		switch (mod) { //使用switch来控制分支
			case 1:
				login(username, password); //向登录函数传入所给定的用户名和用户密码
				// goto remake; // 原式:去掉label
				break;
			case 2:
				change_password(password);
				// goto remake; // 原式:去掉label
				break;
			case 3:
				printf("\t再见,欢迎下次使用!");
				return 0;
			default:
				printf("\t输入错误,重新输入\n");
				// goto remake; // 原式:去掉label
				break;
		}
	}
}

void login(char *username, char
           *password) { //模块化程序设计的思路,这个是登录模块,单独来做个函数,传入的参数为主函数中给定的正确的用户名和密码

	char name[1000];
	char word[1000];
	int n;
	printf("\n");
	printf("\t*******************************\n");
	printf("\t********* 用户登录系统 *********\n");
	printf("\t*******************************\n");
	printf("\n\n");
	printf("\t请输入用户名.\n");
	printf("\t用户名:");
	scanf("%s", name);
	printf("\n");
	if ( strcmp(username, name) == 0) {
		printf("\t输入用户名.\n");
		printf("\t输入密码:");
		scanf("%s", word);
		for (n = 0; n < 5; n++) {
			if ( strcmp( password, word) == 0 ) {
				printf("\n");
				printf("\t*******************************\n");
				printf("\t********* 欢迎用户! *********\n");
				printf("\t*********3.返回上一级界面*************\n");
				printf("\t*******************************\n");
// re: // 原式:去掉label
				while (1) { // 增加一个while循环
					int flag = 1;
					scanf("%d", &flag);
					if (flag == 3) {
						return ;
					} else {
						printf("\t******* 无效命令!请重新输入 ******\n");
						// goto re ; // 原式:去掉label
					}
					printf("\n");
				}
				break;
			} else {
				printf("\t\t请重试!\n");
				printf("\t密码:");
				scanf("%s", word);
				if ( strcmp( password, word) == 0 ) {
					printf("\n");
					printf("\t*******************************\n");
					printf("\t********* 欢迎用户! *********\n");
					printf("\t*********3.返回上一级界面*************\n");
					printf("\t*******************************\n");
// re1: // 原式:去掉label
					while (1) { // 增加一个while循环
						int flag = 1;
						scanf("%d", &flag);
						if (flag == 3) {
							return ;
						} else {
							printf("无效命令");
							// goto re1; // 原式:去掉label
						}
						printf("\n");
					}
					break;
				}
			}
		}
	}

	else if ( strcmp(username, name) != 0) {
		printf("\t用户名错误! 请重新输入!\n");
	}
}

void change_password(char *old_password) {
	char temp_mima[1000], temp_mima1[1000], temp_mima2[1000]; //三个字符串密码,原始密码,新密码1,新密码2
	// printf("请输入原来的密码:"); // 原式:移动到while循环内
// loop: // 原式:去掉label
	// scanf("%s", temp_mima); // 原式:移动到while循环内
	while (1) {
		printf("请输入原来的密码:"); // 原式:移动到while循环内
		scanf("%s", temp_mima); // 原式:移动到while循环内
		if (strcmp(temp_mima, old_password) == 0) {
			printf("\n\n");
			printf("\t*******************************\n");
			printf("\t********* 密码正确! *********\n");
			printf("\t*******************************\n");
			printf("\t请输入新密码:\n");
			scanf("%s", temp_mima1);
			printf("\t请再次输入密码:\n");
			scanf("%s", temp_mima2);
			if (strcmp(temp_mima1, temp_mima2) == 0) {
				printf("\t*******************************\n");
				printf("\t*****修改密码正确!请牢记密码!******\n");
				printf("\t*******************************\n");
				printf("");
				strcpy(old_password, temp_mima1); //用新的密码代替旧的密码,
				return; //返回主函数 // 原式:可以改为break;更好
			} else {
				printf("\t*******************************\n");
				printf("\t***两次输入的密码不一致!修改失败!***\n");
				printf("\t*******************************\n");
				// printf("\t请输入原来的密码::"); // 原式:重复多余了
//				goto loop; //实现用户输出错误密码了,重新输入密码 , // 原式:去掉label
				// getch(); // 原式:多余
				return; // 原式:可以改为break;更好
			}
		} else {
			printf("\t*******************************\n");
			printf("\t*********输入的密码错误!**********\n");
			printf("\t*******************************\n");
			// printf("\t请输入原来的密码::"); // 原式:重复多余了

//			goto loop; // 原式:去掉label
			// getch(); // 原式:多余
			// break; // 原式:因为需要重复修改,所以,不能使用它中止while循环
		}
	}

}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值