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++不会自动指针类型强制转换,需手动进行。