C语言中字符数组输出“烫烫烫烫烫烫烫”,如何解决

c语言怎么定义一个数组

说实话,当我刚开始学习C语言时,数组确实让我很困惑。
不过,一旦理解了几个关键点,以后使用起来就会变得非常容易。

首先,我们来谈谈类型定义。
这其实并不难。
例如,如果要创建分数统计,只需输入 int Score[5 ]。
要计算产品价格,请使用浮动价格[1 0]。
最有趣的是字符数组,字符字符[2 6 ]。
这不是2 6 个英文字母吗?自己用吧。
我写了一个小程序,记录字母出现的频率,定义如下:
在初始化过程中我陷入了陷阱。
当我第一次写代码时,我想初始化一个数组来存储月份的天数,因此 int Month[1 2 ]={3 1 ,2 8 ,3 1 ,3 0...};并且编译器崩溃了。
后来我了解到需要正确使用大括号或者使用下标来单独替换值。
例如,int Month[1 2 ];月[0]=3 1 ;会没事的。
后来习惯了,用了memset(months, 0, sizeof(months));首先将它们全部设置为0,然后根据需要使用下标更改值。

最令人惊奇的是记忆的连续性。
我有一个使用数组来存储学生信息的项目,我想使用指针导航到它。
事实证明,直接 for 循环 i 从 0 到 n-1 ,并以 arr[i] 的形式进行访问。
这与 (arr+i) 完全相同。
当时就觉得C语言底层真聪明,用指针操作数组真是太方便了。
一位朋友告诉我这是由于编译器优化造成的,我相信了这一点。
不管怎样,我使用它很开心。

跨境访问时必须始终保持警惕。
我有一个朋友写了一个小工具并定义了一个包含 5 个元素的数组。
结果,他写了一个循环,我从 0 运行到 1 0你猜怎么着?程序直接崩溃了。
经过长时间排查,发现访问了未定义的内存。
这个教训实在是太深刻了。
现在,当我编写代码时,很难定义数组的大小或使用 sizeof 计算它,而且我不会手写数字。

最大的陷阱是数组的大小是不可变的。
我有一个旧项目需要处理可变长度数据,最终我使用了链表。
后来在重构的时候,我发现如果使用动态内存分配的话,事情会简单很多。
我自己没有运行过,但我记得数据就在附近无论如何,当我现在编写新代码时,我面临着需要可变长度数组的情况,malloc 和 realloc 是我的首选。

特别推荐最后一个遍历的例子。
通过使用 printf 打印每个元素,您可以快速查看数组中存储的内容。
我有写代码的习惯。
初始化数组后,我们首先遍历并打印它,以确保数据正确,然后再继续。
这将防止您稍后在调试时发现数组充满无效字符,这可能是灾难性的。

c语言如何输入带字符的数组

说实话,当我用C语言做这种字符到数字的转换时,我就遇到了麻烦。
你提到的 char[3 ][5 ] 定义确实很基本,但是使用时要小心。
例如,我之前有一个项目,我将用户输入的密码计为数字。
结果,当用户输入“1 2 3 ”时,程序自动得出1 +2 +3 =6 我花了很长时间才找到问题所在。
所以,如果使用得当,这个 (char-'0') 转换是一个神奇的工具,但如果使用不当......呃。

有趣的是,这种简化变换的背后是字符编码的形而上学。
可以看到‘0’到‘9 ’这些值在ASCII表中是连续的,所以‘1 ’
‘0’正好是4 9
4 8 = 1 但是如果遇到非数字字符就会出现问题。
比如用户输入“1 a2 ”,这样直接相减肯定是错误的。
我正在编写一个登录函数,一些愚蠢的用户输入了“1 a2 ”。
我用了直接循环一一递减,但是程序因为超出限制而崩溃了。
后来我加了一个判断,保证每个字符在'0'到'9 '之间再转换,然后就搞定了。

在我看来,当时处理身份证号码是一件很烦人的事情。
当用户填写表单时,ID 号将作为字符串读取。
如果要计算校验码,则必须将每个数字转换为数字。
在我之前的代码中,我写了一个循环, for(i=0;i<1 xss=clean>'0';然后他们使用加权和的方法来计算校验码。
当时还在用Turbo C,加固要等半天。
现在想象一下,将 C++ 字符串转换为 int 流将非常容易。

我在数据文件处理中也遇到过陷阱。
有一个天气数据文件,数字之间用空格分隔。
一开始我想到用sscanf("%d%d%d"&val1 ,&val2 ,&val3 ),但有时发现数据行是“1 2 3 4 5 6 ”,空格导致解析失败。
后来开始用fgets读取整行,然后用sscanf(line, "%d %d %d", &val1 , &val2 , &val3 ),然后就安定下来了。
当时我正在编辑,将文件内容打印到屏幕上,看着损坏的数据非常混乱。

最恶心的时刻是当我在旧系统中处理数据时,发现其中存储的日期格式为“01 01 2 02 4 ”。
经过(char-'0')直接转换为1 1 000 + 1 1 00 + 2 1 0 + 4 结果程序计算出1 04 6 ,与预期的9 9 0不同。
后来我发现,旧系统使用字符来计算年月日,而新系统使用整数。
直接替换导致所有数据都不正确。
最后只能加上判断了。
如果是8 位字符串,则将其视为YYMMDD,这将被视为通过。

现在我想了一下,这个将字符转换为数字的很酷的功能在某些条件下可以工作,但是在使用它之前你应该考虑边界条件。
例如,如何处理负数?如何处理小数?我有一个项目,用户输入“3 .1 4 ”并自动将“0”减少到4 9 结果,系统将它们视为1 9 ,这在当时非常无聊。
因此,编写此类转换代码时,注释要写清楚,测试用例要完整。