【C语言】一些初学易犯的小错集合2

【C语言】一些常犯的小错集合2

字符和字符串

不知道大家有没有犯过这种错,反正我是在定义字符类型的时候忘加单引号或者是加成了双引号。
在此记录一下正确的方式:
char定义的字符要用单引号引起(使用单引号作为定界符):

char ch = 'w';

而字符串则需要双引号引起(使用双引号作为定界符):

char arr[] = "hello";
char *p = "abcde";

ps:字符串的结束标志是一个 \0转义字符
在计算字符串长度时 \0 是结束标志,不算作字符串的内容,即用%s打印字符串时遇到 \0 即停止。
那么问题来了,下面的代码会打印出什么结果?

#include <stdio.h>
int main()
{
	char arr1[] = "abc";
	char arr2[] = { 'a', 'b', 'c' };
	char arr3[] = {'a','b','c','\0'};
	char arr4[4] = { 'a', 'b', 'c' };
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("%s\n", arr3);
	printf("%s\n", arr4);
	return 0;
}

答案是:在这里插入图片描述
出现了!烫烫烫!
上面有说过%s遇到\0时即停止打印,那么arr2[]中有没有\0呢?
在这里插入图片描述
答案是:没有。所以这种时候用%s打印后会多出一些随机值
遇见这种情况解决方式就要像arr3[]那样自己加入’\0’,亦或者给数组直接定义大于等于3的空间,让它能有位置放入’\0’。

转义字符

转义字符顾名思义就是转变的意思。
容易出错的地方不在于转义字符本身的使用,而是在某些时候会导致输出结果不是自己想要的结果。
先给部分常用的转义字符看看:
在这里插入图片描述
再来看看我掉过的坑:

#include <stdio.h>
int main()
{
	printf("%d\n", strlen("abc"));
	printf("%d\n", strlen("c:\test\328\text.c"))return 0;
}

strlen()是求字符串长度的函数,遇到\0就会停止计数。
ps:strlen()也是<stdio.h>里的库函数。
那么上面的程序会输出什么?
在这里插入图片描述

3就不用多说了,14是怎么出来的呢?
在这里插入图片描述
在这里面,有转义字符 \t\32(两个八进制数)

选择语句

最经典的错误:

#include <stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	switch (a){
	case 1:
		printf("1\n");
	case 2:
		printf("2\n");
	default:
		printf("输入有误\n");
	}
	system("pause");
	return 0;
}

看出哪里有问题了吗?
没错,掉了break来跳出语句。这样无论输入什么数都会导致输出有误。
正确应当在每个case执行后都加上break(除过某些特殊情况比如:几个case在一个判断范围内,则只需要在范围内的最后一个case加上break)。

#include <stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	switch (a){
	case 1:
		printf("1\n");
		break;
	case 2:
		printf("2\n");
		break;
	default:
		printf("输入有误\n");
		break;
	}
	return 0;
}

END

下次写写操作符的使用会出现的小错误(其实都是数学没学好

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值