Day 3
复习
编译器:VS2019;
学习资料
1、B站视频(P18)见链接 【求知讲堂2021C语言/C++视频99天完整版(不断更新中)学完可就业-哔哩哔哩】https://b23.tv/4DzQDY;
二维数组
练习
#include<stdio.h>
int main(void)
{
/*int c[2][3];
int a[5][3] =
{
{80,75,92},
{61,65,71},
{59,63,70},
{85,87,90},
{76,77,85}
}*/;//按行分段赋值
//int a[5][3] = { 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85 };//按行连续赋值
/*for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}*/
/*char c[10];
char MyChar[5];
char TwoChar[3][5];
char a[10] = { 'c' , ' ' , 'p' , 'r' , 'o' , 'g' , 'r' , 'a' , 'm' , 'c' };
for (int i = 0; i < 10; i++)
{
printf("%c ",a[i]);
}*/
/*printf("%d");*/
/*int i, j;
char a[][5] =
{
{'B' ,'A' ,'S' ,'I' ,'C'},
{'d' ,'B' ,'A' ,'S' ,'E'}
};
for (i = 0; i < 2; i++)
{
for (j = 0; j < 5; j++)
{
printf("%c", a[i][j]);
}
printf("\n");
}*/
//char c[] ={ "C prpgram" };
//char a[] = "C program";
//char MyChar[] = "I'm LiuShuHao";
String Abulance[] = "hello,world";
//char b[] = "BASIC\ndBASE\n";
//printf("%hS\n", b);
/*
#pragma warning (disable: 4996)
/*char st[15];
printf("input string :\n");
scanf("%s", st);
printf("%s\n", st);*//*成功*/
/*char st[15];
printf("input string :\n");
scanf_s("%s", st);
printf("%s\n", st);*//*失败*/
//#pragma warning (disable:4996)
// char st1[6], st2[6], st3[6],st4[6];
//
// printf("input string :\n");
// scanf("%s%s%s%s", st1, st2, st3, st4);
// printf("%s %s %s %s\n", st1, st2, st3, st4);
新学习
- puts、gets、stract函数
- 用法puts( st)、gets( st )、stract( st1,st2)
//==========================puts==========
/*char st[15];
printf("input string :\n");
gets(st);
puts(st);*/
//=====================连接字符stract==============
static char st1[30]="Your name is ";
int st2[20];
printf("input your name :\n");
gets(st2);
strcat(st1, st2);
puts(st1);
return 0;
-
scanf与scanf_s的区别
3.1. scanf语法
int scanf(
const char *format [,
argument]...
);
- 参数
format 格式控制字符串;
argument 可选参数; - 返回值
返回已成功转换和分配的字段数量;返回值不包括已读取但未分配的字段。 返回值为 0 表示没有分配任何字段。
如果 format 是 NULL 指针,则调用无效的参数处理程序,如果允许执行继续,这些函数将返回 EOF ,并 errno 设置为 EINVAL 。 - 执行
函数 scanf 从标准输入流中读取数据 ,将数据写入 给定的位置 argument 。 - 注
使用 读取字符串时格式不正确的输入很容易导致缓冲区 scanf %s 溢出。 - 关于返回值的警告
修改
#pragma warning (disable: 4996)
char st[15];
printf("input string :\n");
if(scanf("%s", st)==0)
return;
printf("%s\n", st);
3.2. scanf_s语法
int scanf_s(
const char *format [,
argument]...
);
- 参数
format:格式控制字符串。
argument:可选参数。 - 返回值
返回已成功转换和分配的字段数。 返回值不包括已读取但未分配的字段。 如果返回值为0,则表示未分配任何字段。 对于错误,返回值为 EOF ; 或者,如果在第一次尝试读取字符时找到文件尾字符或字符串末尾字符,则为。 如果 format 是 NULL 指针,则会调用无效参数处理程序,如 参数验证中所述。 如果允许执行继续,则 scanf_s wscanf_s 返回 EOF 并将设置 errno 为 EINVAL 。 - 执行
scanf_s 函数从标准输入流中读取数据, 并将其写入到中 argument 。 每个都 argument 必须是指向与中的类型说明符相对应的变量类型的指针 format 。 - 注
与 scanf , scanf_s 要求你为一些参数指定缓冲区大小。 指定所有、、、 c C s S 或字符串控制集参数的大小 [] 。 以字符作为附加参数传递的缓冲区大小。 它紧跟在指向缓冲区或变量的指针后面。 例如,如果您正在读取一个字符串,则将传递该字符串的缓冲区大小,如下所示:
char s[10];
scanf_s("%9s", s, (unsigned)_countof(s)); // buffer size is 10, width specification is 9
- %s、%hs
参考:
scanf
https://docs.microsoft.com/zh-cn/cpp/c-runtime-library/reference/scanf-scanf-l-wscanf-wscanf-l?view=msvc-160
scanf_s
https://docs.microsoft.com/zh-cn/cpp/c-runtime-library/reference/scanf-s-scanf-s-l-wscanf-s-wscanf-s-l?view=msvc-160