数据类型(2)

来源:互联网 发布:python aes ecb 编辑:程序博客网 时间:2024/05/13 23:49

一、定义与声明的区别
这里写图片描述
二、格式化输入输出函数scanf()andprintf()
c语言中scanf()的垃圾处理问题
这里写图片描述

第一种解决方案:用getchar()清除

scanf("%d", &x);getchar();scanf("%c", &ch);

‍‍‍‍‍第二种解决方案:空格

scanf("%d", &x);scanf(" %c", &ch);   // 注意空格

第三种解决方案:%*c

scanf("%d", &x);scanf("%*c%c",&ch);

键盘输入的字符都存到缓冲区内,一旦键入回车,getchar就进入缓冲区读取字符,一次只返回第一个字符作为getchar函数的值,如果有循环或足够多的getchar语句,就会依次读出缓冲区内的所有字符直到’\n ‘。要理解这一点,之所以你输入的一系列字符被依次读出来,是因为循环的作用使得反复利用getchar在缓冲区里读取字符,而不是getchar可以读取多个字符,事实上getchar每次只能读取一个字符。如果需要取消’ \n’的影响,可以用getchar();来清除,这里getchar();只是取得了’\n ‘但是并没有赋给任何字符变量,所以不会有影响,相当于清除了这个字符。

getchar、scanf以及缓冲区的概念
三、怎么用scanf输入一个句子
scanf的结束标志是空格和回车键,而gets的结束标志为回车键,输入字符串时,一般采用gets
因此有下面两种方法可以在使用scanf时完整输入字符串:

1)利用strcat()函数来实现带空格字符串的输入,可以用字符串追加函数strcat()来连接每个单词。
Strcat()一般格式:char* strcat(char* dest,const char*src);
函数将字符串src连接到dest的尾端,并返回字符串dest的首指针。

#include “stdio.h” #include “string.h” void main() {     char *str,*s1,*s2;     clrscr();                            / /清屏    scanf(“%s”,str);               //输入字符串     scanf(“%s”,s1);              //此后两个输入语句不需要用户进行输入    scanf(“%s”,s2);         strcat(str,“”);     //连接一个空格     strcat(str,s1);     //连接单词     strcat(str,””);     //连接一个空格    strcat(str,s2);     //连接字符串    printf(“\n%s”,str);    //输出字符串str }   

2)利用格式符“%[]”它的作用为扫描字符集合。
scanf(“%[^c]”,str);
其中“c”是一个具体的字符常量(包括控制字符)。
当输入字符串时,字符“c”将被当作当前输入的结束符。
如同默认情况下空格和回车键以及TAB键是作为字符串输入的结束符一样,利用此格式符便相当于由编程者自己指定一个输入结束符。

#include”stdio.h” #include “conio.h” void main() {     char *str;    scanf(“%[^\n]”,str);  //以换行符作为字符串输入的结束    printf(“\n%s”,str); } 
0 0