编程遇到的一些问题和解决

1.scanf()函数

例1:

#include<stdio.h>
int main()
{
	struct Student
	{
		char name[20];
		char sex;
	} person;
	scanf("%s,%c",person.name,person.sex);
	printf("%s",person.name);
}

output:
在这里插入图片描述
原因:scanf()函数只有遇到空格,回车才结束输入。因此“,”依然输给了name【20】而不是sex。
解决:把输入格式“,”换成空格。

例2:

#include<stdio.h>
int main()
{
	char c[20];
	scanf("%[^\n]",c);
	printf("%s",c);
 } 

^\n表示遇到\n才结束scanf的读取,遇到其他任何字符都不结束读取。如果把\n换成其他字符如a,空格等也可以。

例3:

#include<stdio.h>
int main()
{
	char str[10]="edfe";
	int a=10; 
	scanf("%s",str);
	scanf("%d",&a);
	printf("%s\n",str);
	printf("%d",a);
 } 

scanf输入格式必须要用到地址,printf则根据数据的类型而定。

2.指针与数组名

例:

#include<stdio.h>
int main()
{
char name[20];
scanf("%s",&name);//等价于scanf("%s",name);
printf("%o\n",&name);
printf("%o\n",name);
printf("%o\n",&name+1);
printf("%o\n",name+1);
printf("%s",name);
}

output:
在这里插入图片描述
name是第一个元素name[0]的地址,以元素为单位;而&name是整个数组name[20]的首地址,以整个数组为单位。二者的值是相等的,但是name的长度是1,&name的长度是20。八进制的104正好比60多了20,非常完美。

3.不同输入函数

gets(),系统会自动增加一个\0
char c[]=“ssss”,系统会自动增加一个\0
char c[]={‘a’,‘c’,‘c’},系统不会自动增加一个\0

4.错误提示

1.[Error] ld returned 1 exit status
可以把源文件另存为桌面上的文件夹

2.redeclared as different kind of symbol
重复定义变量

3.Program received signal SIGSEGV, Segmentation fault
应该是栈溢出,不是很懂,等数据结构再学。

4.Dev c++不会自动指针类型强制转换,需手动进行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值