4.1
先看一段代码;
#include <stdio.h>
#define PRAISE "You are an extraorinary being."
int main(void)
{
char name[40];
printf("What's your name?");
scanf_s("%s", name, 40);
printf("Hello, %s. %s\n", name, PRAISE);
getchar();
getchar();
return 0;
使用%s的话scanf_s()只能够输入没有空格的字符串,若是输入含有空格的字符串则会直接退出如“张 三”;
结果为:
What's your name?张三
Hello, 张三. You are an extraorinary being.
#include <stdio.h>
#define PRAISE "You are an extraorinary being."
int main(void)
{
char name[40];
printf("What's your name?");
scanf_s("%[^\n]", name, 40);
printf("Hello, %s. %s\n", name, PRAISE);
getchar();
getchar();
return 0;
}
若是要输入含有空格的字符串我们可以采用控制字符 %[^\n];例如经常需要读入一行字符串,而这串字符里面可能有空格、制表符等空白字符,如果直接用%s是不可以的,于是有些人就想到用gets(),当然这也是一种选择,但是懂C的人基本上都知道gets()是一个很危险的函数,而且很难控制,特别是与scanf()交替使用时前者的劣势更是一览无余,所以gets()一般是不推荐用的,其实用%[^\n]就可以很好的解决这个问题了,^表示"非",即读入其后面的字符就结束读入。这样想读入一行字符串直接用scanf("%[^\n]%*c",str);就可以了,
%*c的作用是读入\n,否则后面读入的将一直是\n。
结果为
What's your name?张 三
Hello, 张 三. You are an extraorinary being.
4.2.1
sizeof()和strlen()都包含在头文件string.h中。
sizeof():以字节为单位给出对象的大小。(包括空字符)
strlen():给出字符串中的字符长度。(不包括空字符)
4.3常量和c预处理器
#define 使用预处理器定义常量
const 用于限定一个变量为只读,即可以使用,但是不可以更改。(const int MONTHS =12;)
4.4printf()和scanf()
①printf()的转换说明修饰符(*)
②打印较长的字符串
1.使用多个printf()语句;
2.用反斜杠(\)和Enter键组合来断行使光标移至下一行;
3.在两个用双引号括起来的字符串之间用空白隔开;
例如
printf("here is one way to ");
printf("printf a long string.\n");
printf("here is one way to \
printf a long string.\n");
printf("here is one way to"
" printf a long string.\n");
结果为
here is one way to printf a long string.
here is one way to printf a long string.
here is one way to printf a long string.
4.4.5
使用scanf()
如果用scanf()读取基本变量的值,在变量名之前加上一个&;
如果用scanf()把字符读入字符数组中,不要使用&;
scanf()函数使用空白(换行符,制表符和空格)把输入分成多个字段。