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

 
 
 
日一二三四五六
       
       
       
       
       
       

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

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

本吧签到人数:0

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

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

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

[本质水]吧里好像玉不多,那我拿块砖来丢丢

  • 只看楼主
  • 收藏

  • 回复
  • SeaDrip_Poplar
  • 葱の帝球
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
新手向技术(小聪明)分享?
本质是个水贴,作业党伸手党勿入


  • SeaDrip_Poplar
  • 葱の帝球
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
首先各位新人们在调试程序的时候有没有过这样的想法:每次我都要手动输入数据,好麻烦啊,编译器不能每次调试的时候都帮我把数据填进去嘛,我就专心改代码多好
结论当然是“有的”,而且这其实才是控制台程序最常见的获取输入方式,只不过你的代码需要做一点点修改,不再是
printf("请输入一个整数");
scanf("%d", &a);
了,相信这一段代码你们都快写吐了吧(笑)
这一贴先教你们耍点小聪明省掉每次都要输入数据的麻烦,至于这样做的意义和这贴的意义我们后面慢慢说
常见的程序入口有两种写法
int main(void)
和
int main(int argc, char* argv[]) (当然还有其它类似写法,包括但不限于添加const)
前者是新人们常用的,而后者可以用于接收命令行参数


2026-02-22 19:32:29
广告
不感兴趣
开通SVIP免广告
  • SeaDrip_Poplar
  • 葱の帝球
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
以vs为例,按下alt+F7之后你可以看到这样的设置界面
你可以把想要传给程序的参数依次写在这里,以空格分隔,如果你要输入的字符串本身就有空格(如图中的hello world)可以用双引号把它框起来,这样它会作为一个参数传入

如果你是在使用vscode,可以在.vscode/launch.json里添也命令行参数
效果是一样的,我没有使用过吧主推荐的小熊猫等编译器,欢迎吧友们补充相应截图
这样设置好之后你的代码只需要一点简单的小操作就可以直接拿到数据了


  • SeaDrip_Poplar
  • 葱の帝球
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
喏,主函数改成这样
当然,这个shell_input函数不是标准的库函数,要使用它的话你可以使用我写好的代码文件:

图糊?不怕,直接到git上的src文件夹埋里去复制就好啦(链接会在楼下或者此楼回复中放出来,免得被吞)
而且我故意使用了switch而不是类似map加函数指针的骚操作就是为了方便各位在发现输入的数据类型不够用的时候自己扩展添加的


  • SeaDrip_Poplar
  • 葱の帝球
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼



  • AN-drew
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
用freopen不是更方便,库函数还通用


  • SeaDrip_Poplar
  • 葱の帝球
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好了,代码丢完了,该展开说点别的东西了
其实大家都明白,调试程序的时候手动输一下数据怎么了,大伙初学的时候不都这么过来的吗,何必又要引文件又要写一个新方法绕这么大一圈只为省一点完全没必要省的时间呢
其实这一贴的重点不在于自动获取输入的“方法”,而是想通过一个新人们可能存在的“痛点”来跟新人们说一下命令行参数这个东西它是什么,它是为什么存在的,以及,小黑框到底是什么,写完了干什么用
因为现在很多新人都有这个疑问:我学完了C,但写的都是些小黑框框,别人的程序都有漂亮的界面,那我写这个东西有什么用呢
事实上这个疑问来源是反的,我们的程序里并没有哪一句代码是创建一个小黑框框这种界面,而小黑框框会出来,只是因为系统需要给各种“没有界面的程序”展示运行信息而提供的,所以正确的顺序其实应该是系统为了调用你的程序,先打开了一个小黑框框(系统控制台,一般称为shell,不同系统可以使用不同的shell,如windows的cmd或者PowerShell),然后在这个shell里调用你的程序,你可以试一下,在windows里打开cmd,然后cd到你写的程序所在的目录下,然后输入程序的名字,你就会发现程序运行起来了,跟你在编译器里看到的小黑框框效果是一样的
以windows为例,你可以打开系统盘下的Windows/System32文件夹,会发现很多要在控制台里执行的命令其实就是这个文件夹下的一个程序,如果你是一个linux/mac用户,这种感觉就更直观了,ls /usr/bin 你会发现全是你常用的命令
简单来说,你写的“小黑框框程序”跟这些命令就是一样的,不信?你把自己写好的程序丢到
系统盘/Windows/System32里面,然后命令行输入程序名字,看看效果就是了


  • SeaDrip_Poplar
  • 葱の帝球
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
那我们知道,系统命令是经常要写到批处理文件里的,批处理一旦开始运行,总不能停下来每次都等你手动输入吧,这个时候我们可以看到命令的常见用法,就是通过命令行向程序(命令)传递参数,或者说这才是控制台程序获取输入的最主要方法
所以你是不是开始有一点想法了?我用电脑的时候有XXX功能没办法做到,那我能不能自己写点程序帮系统补上这部分能力?我写批处理的时候有些功能是没有的,那我能不能自己定义一个命令来实现?恭喜你,现在强大的系统最开始的时候就是被这样的办法一点一点堆起来的,你已经入门了!


2026-02-22 19:26:29
广告
不感兴趣
开通SVIP免广告
  • SeaDrip_Poplar
  • 葱の帝球
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这一贴确实主要是说说控制台程序是什么东西,该怎么用,命令行参数有多重要,但多少还是有些别的可以讲的东西,比如“分文件”
新人们写程序的时候有没有觉得自己经常一个文件写了几百行,各种乱七八糟的东西都堆在一起太烦了
事实上实际的项目里一个文件几百行不算什么少见的事,但所有东西(尤其各自之间关联不那么大的东西)全堆在一起就恶心人了,所以这个时候,我们就应该按代码作用,把函数们分别放置到不同的源码文件当中去,但只是简单的剪切粘贴到新文件你会发现主函数里调用不到它了,因为C语言的函数需要“先定义,后使用”,这就是头文件(.h文件)的作用了,大部分情况下头文件里只建议放各种声明(包括函数声明、结构体声明、宏等等)而不建议放具体的函数实现,实现是要放到其它的.c文件里的,这样分文件以后不仅管理起来更直观,还可以在有需要的时候把特定几个文件编译好,打包到静态库里供多个项目通用


  • SeaDrip_Poplar
  • 葱の帝球
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
当然本人水平有限,贴子写得也有点乱,但凡能帮新人们从初学到专业上迈出一步也算是没白写,更多的嘛,就期待吧里的大佬们写更多的技术分享贴了,这才是丢砖的最大意义


  • 一只deaths
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
已点赞收藏


  • 首祸诸臣_
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
点了


  • spiffy
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
萌新问一下argv(0)是不是存在可执行程序的名字,往后存的是输入的变量


  • 起个id真难119
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
谢谢以后好好看看 我只会扔固定参数 每次都需要修改


2026-02-22 19:20:29
广告
不感兴趣
开通SVIP免广告
  • GTA小鸡
  • 吧主
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
吧里的老东西开始发力了,萌新们都给我好好记笔记啊!


登录百度账号

扫二维码下载贴吧客户端

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