c语言 switch条件选择,寻找高手帮助解决switch条件选择语句内使用gets()

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

没有什么大虾们,上面的天体就是我一个在胡扯。

实际应用中永远不要用 gets,因为无法保证用户不会输入过多的字符,引起缓冲区溢出。

可以用 char *fgets(char *s, int size, FILE *stream); 代替。

const int buffer_size = 128;

char buffer[buffer_size];

fgets(buffer, buffer_size, stdin);

用 scanf() 也可以,但是要在 %s 前加上读取的最大长度,确保没有溢出,比如 "%127s"。

用 scanf 读取数字问题很大,如果用户输入非数字字符,几乎可以肯定读不到你需要的东西。

需要用户输入数字,可以用 fgets 当字符串读,然后用

long int strtol(const char *nptr, char **endptr, int base);

double strtod(const char *nptr, char **endptr);

处理,转换成数字。其中 strtol 还支持 2-36 进制数的输入。

其实 GUI 下的程序,可以不用担心这些,用户的输入和转换很多时候有现成的控件或库可用。

比如 Edit Box。

通常在 GUI 下的程序,只有在读取文本数据文件时,比如配置文件,才需要自己转换,这些函数的副作用还是要注意的。

最后,为了防止缓冲区溢出,还有一个函数也要注意的

int sprintf(char *str, const char *format, ...);

除非你能确保用的参数的范围,否则也容易出问题。

C99 标准增加了一个函数,取代 sprintf 的,

int snprintf(char *str, size_t size, const char *format, ...);

很多编译器即使还不支持 C99 标准,但是也会加了对这个函数的支持作为扩充,尽量用这个。

哈哈,今天运气好,竟然能登录�

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值