网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月14日漏签0天
c语言吧 关注:798,986贴子:4,355,443
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 3 4 5 6 下一页 尾页
  • 108回复贴,共6页
  • ,跳到 页  
<<返回c语言吧
>0< 加载中...

为什么书上不提倡用goto 但我觉得很好用啊

  • 只看楼主
  • 收藏

  • 回复
  • ok游戏大菜鸟
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "website.h"
web _url;
int main()
{
char select;//菜单选项
char ensure;//确认
FILE*pf;//文件流
int n = 0; //网址编号
char url[1024];//网址
char name[1024];//网站名称
int count;
char go_url[1024 + 14] = {"start http://"};
//---------------------------------------------
ComeBack_MainMenu://回到主菜单
{
printf(" 网址收藏\n");
printf("**************\n");
printf("* 1:添加网址 *\n");
printf("* 2:访问网址 *\n");
printf("* 3:删除网址 *\n");
printf("**************\n");
printf("版本:1.0\n");
}
//---------------------------------------------
select = getch(); //输入选项
switch (select) //判断跳转
{
case '1':
goto add_url;
case '2':
goto visit_url;
case '3':
goto del_url;
}
//---------------------------------------------
add_url:
{
pf = fopen("UrlData", "a+b"); //打开流
system("cls");
while (fread(&_url, sizeof(web), 1, pf ) != 0)
{
n = _url.on;
}
n++;
printf("请添加网址(首字符输入 # 表示返回主菜单)>");
scanf("%s", url);
if (url[0] == '#')
{
system("cls");
fclose(pf);
goto ComeBack_MainMenu;
}
printf("请备注(首字符输入 # 表示返回主菜单)>");
scanf("%s", name);
if (name[0] == '#')
{
system("cls");
fclose(pf);
goto ComeBack_MainMenu;
}
//-----------------------------------------
printf("您确定保存该网址吗?(Y or N)");
ensure = getch();//提示用户确认保存
switch (ensure) //判断跳转
{
case 'Y':
case 'y':
_url = AddUrl(url, name, n);
fwrite(&_url, sizeof(web), 1, pf);
fclose(pf);
system("cls");
break;
case 'N':
case 'n':
system("cls");
fclose(pf);
goto ComeBack_MainMenu;
}
//-----------------------------------------
goto visit_url;
}
//---------------------------------------------
visit_url:
{
n = -1;
if ((pf = fopen("UrlData", "rb")) == 0)
{
system("cls");
printf("目前您还没有添加过网址\n按任意键返回主菜单......");
getch();
system("cls");
goto ComeBack_MainMenu;
}
if (fread(&_url, sizeof(web), 1, pf ) == 0)
{
system("cls");
printf("目前您还没有添加过网址\n按任意键返回主菜单......");
getch();
system("cls");
fclose(pf);
goto ComeBack_MainMenu;
}
system("cls");
printf("%d---返回主菜单\n", 0);
do {
ShowUrl(&_url, &count);
} while (fread(&_url, sizeof(web), 1, pf ) != 0);
printf("现在请您输入要访问网址的编号>");
//---------------------------------------------
visit_mistake://重新输入
{
scanf("%d", &n);
}
if (n == 0)
{
system("cls");
goto ComeBack_MainMenu;
}
if (n < 0)
{
while (getchar() != '\n');
printf("您的输入无效!\n请重新输入>");
goto visit_mistake;
}
if (n > count)
{
printf("没有找到该编号!\n请重新输入>");
n = -1;
goto visit_mistake;
}
}
//---------------------------------------------
//访问网站
fseek(pf, ( n - 1)*sizeof(web), SEEK_SET);
fread(&_url, sizeof(web), 1, pf );
strcat(go_url, _url.url);
system(go_url);
system("cls");
fclose(pf);
strcpy(go_url, "start http://");
goto ComeBack_MainMenu;//返回主页
//---------------------------------------------
del_url:
{
web* url_arr;
int i = 0;
n = -1;
if ((pf = fopen("UrlData", "rb")) == 0)
{
system("cls");
printf("目前您还没有添加过网址\n按任意键返回主菜单......");
getch();
system("cls");
fclose(pf);
goto ComeBack_MainMenu;
}
if (fread(&_url, sizeof(web), 1, pf ) == 0)
{
system("cls");
printf("目前您还没有添加过网址\n按任意键返回主菜单......");
getch();
system("cls");
fclose(pf);
goto ComeBack_MainMenu;
}
system("cls");
printf("%d---返回主菜单\n", 0);
do {
i++;
ShowUrl(&_url, &count);
} while (fread(&_url, sizeof(web), 1, pf ) != 0);
url_arr = (web*)malloc(sizeof(web) * i);
printf("现在请您输入要删除网址的编号>");
del_mistake://重新输入
{
scanf("%d", &n);
}
if (n == 0)
{
system("cls");
fclose(pf);
goto ComeBack_MainMenu;
}
if (n < 0)
{
while (getchar() != '\n');
printf("您的输入无效!\n请重新输入>");
goto del_mistake;
}
if (n > count)
{
printf("没有找到该编号!\n请重新输入>");
n = -1;
goto del_mistake;
}
rewind(pf);
for (i = 0;; i++)
{
if (fread(&_url, sizeof(web), 1, pf ) == 0) {
break;
}
if (i == n - 1)
{
i--;
continue;
}
url_arr[i] = _url;
}
n = i;
fclose(pf);
pf = fopen("UrlData", "wb");
for (i = 0; i < n; i++)
{
fwrite(&url_arr[i], sizeof(web), 1, pf);
}
fclose(pf);
system("cls");
goto visit_url;
}
}


  • ok游戏大菜鸟
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有人吗


2025-05-14 11:47:16
广告
  • 古辰未白丶天川水团
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
因为萌新看不懂,就比如我


  • 兴隆山独行
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
goto建议用它跳出多重循环的
你这样弄个函数实现不好吗


  • YujiSY
  • 小吧主
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
goto就是因为太好用了所以才禁用的,随意使用goto会导致程序结构混乱可读性极差,维护成本非常高,而且也不是完全禁止的,在某些特定场合也是可以使用的,比如跳出多重循环


  • 北冥雪
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
微软都喜欢在实例代码里用goto,只要把握的好就行


  • 塞哈哈真
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一般只有统一出错才用goto


  • 小坂井绫
  • 团子家族
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
因为用多了会乱吧


2025-05-14 11:41:16
广告
  • Baka9
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
可以用 但是使用频率应远小于if分支语句 goto用的好就是神作


  • 血碧心丹
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
等你维护别人的code,或者隔几个月再去看code的时候说不定会骂死自己,因为有可能完全看不懂了


  • XeO2
  • 马猴烧酒
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不是不提倡用goto,是反对滥用goto。C语言提供的if,for之类的结构化语句本身就是为了减少必须使用goto的情况,否则和汇编有什么区别


  • 各自安好ctw
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我知道的就两个地方用 goto 比较好,一个是跳出多重循环,一个是函数统一跳到一个位置进行退出处理,这时候goto最好用


  • 三-聲
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
内存泄漏了


  • Kyanenn
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
太灵活了会破坏代码结构,导致可读性变得很差


2025-05-14 11:35:16
广告
  • 宇皇大帝
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在面向过程编程中,还是有很多地方可以用,如果是面向对象,用处就不大,有很多方法可以替代,特别是现在很多程序都是事件驱动,程序大了,goto会让程序变的混乱


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 3 4 5 6 下一页 尾页
  • 108回复贴,共6页
  • ,跳到 页  
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示