typedef关键字、结构体、关键字auto、控制流程、随机数生成程序、输入验证

1.typedef
作用:重新定义类型名字。如下:
typedef int i_T;
i_T i=1;
该语句表示:int 类型此时被赋予了两个名字,一个是int,一个是i_T。
作用:使程序变得简单,可以提示很多隐藏细节。

2.结构体
结构体赋值比较麻烦,可以重载赋值运算符来解决这一问题。

3.auto
关键字auto自动给变量赋类型,如下:
auto i=0.1;// i自动被赋予double类型
auto i = 1 + 2; // 因为1+2都是int类型,所以i被自动赋予int类型。

但是要注意:这仅在创建时初始化变量时有效,在没有初始化值的情况下创建的变量不能使用此功能。
还有就是,auto关键字不能和参数一起使用,比如下列代码就是错误的:
int m(auto x,auto y){//代码错误,不能和参数一起使用
return x+y;
}
另外,c11有了尾随返回类型语法,代码如下:
auto add(int x, int y) -> int;//用了auto类型,但是返回值是一个int整型。
它等效于:
int add(int x, int y);

4.控制流程

exit(0);//离开程序

5.伪随机数生成程序

int prng(){
static int seed=456456;//这里的staitc非常重要,这保证了每次循环使用,或者调用使用随机数生成函数的到的数字随机
seed=465423*seed+2396403;
return seed % 32768;
}

注:这种随机数生成方法很不好,原因:每个数生成的概率应该是可控的。比如是:相同概率或者概率有可控规律,这在游戏中的运行比较广泛。还有就是,生成随机数应该要有周期性。因此可以使用改进的方法。
具体见下:
https://www.learncpp.com/cpp-tutorial/59-random-number-generation/

6.输入验证

当执行如下程序时:
int a;
dobule b;
cin>>a;
cin>>b;
如果在输入内容的时候,输入了5z的话,在输入缓冲区内,5被赋给了a,但是剩下的z就仍然留在了缓冲区。在下次需要输入赋值的时候,直接赋值且并不会询问。在这个程序中,z被直接赋值了b,这就导致了程序错误。
因此在进行输入的时候,要记得对输入内容进行验证。

当输入错误的时候,cin可进入故障模式:
在这里插入图片描述
cin.ignore():虽然也是删除缓冲区中数据的作用,但其对缓冲区中的删除数据控制的较精确。
具体用法如下:
cin.ignore(int intExp, char chExp);
其中intExp 是一个整型表达式,也可以是一个整型数值,这个数值表示在一行中忽略的字符的最大数目,比如说intExp=100;还有一个参数chExp,是一个字符表达式。
这样解释:cin.ignore()停下有两种情况:一种是表示如果遇到一个字符值等于chEXP,那么就停止ignore();还有一种是,100个字符之后,如果还没有遇到字符值等于chEXP,此时也要停下,所以100是ignore()所忽略的最大字符数。

cin.fail():验证输入是否失败。
cin.sync():是清空缓冲区。
在使用std::cin时,为了使程序健壮,要对输入的内容进行验证,可以进行如下考虑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来为您解答。 首先,我们可以使用C语言中的rand()函数来生成随机数,并将它们存储在一个线性表中。具体实现如下: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX_SIZE 10 typedef struct { int data[MAX_SIZE]; int length; } SqList; void initList(SqList *L) { int i; srand((unsigned int)time(NULL)); // 初始化随机数种子 for (i = 0; i < MAX_SIZE; i++) { L->data[i] = rand() % 100 + 1; // 生成1-100的随机数 } L->length = MAX_SIZE; } void printList(SqList L) { int i; for (i = 0; i < L.length; i++) { printf("%d ", L.data[i]); } printf("\n"); } void insertElem(SqList *L, int elem) { int i, j; if (L->length >= MAX_SIZE) { printf("线性表已满,无法插入元素!\n"); return; } for (i = 0; i < L->length; i++) { if (L->data[i] > elem) { break; } } for (j = L->length - 1; j >= i; j--) { L->data[j + 1] = L->data[j]; } L->data[i] = elem; L->length++; } int main() { SqList L; initList(&L); printf("随机生成的有序线性表为:\n"); printList(L); int elem; printf("请输入要插入的元素:"); scanf("%d", &elem); insertElem(&L, elem); printf("插入后的有序线性表为:\n"); printList(L); return 0; } ``` 以上代码中,我们定义了一个结构体类型`SqList`,它包含一个整型数组`data`和一个表示线性表长度的整型变量`length`。`initList()`函数用于初始化线性表,它通过调用`srand()`函数初始化随机数种子,然后使用`rand()`函数随机生成10个1-100的整数,并将它们存储在`data`数组中。`printList()`函数用于输出线性表中的元素。`insertElem()`函数用于向线性表中插入一个元素,它首先判断线性表是否已满,如果已满则输出提示信息并返回;否则,它从线性表的第一个元素开始遍历,找到第一个大于待插入元素的位置,然后将这个位置后面的元素都向后移动一位,最后将待插入元素插入到这个位置上。 最后,在`main()`函数中,我们先调用`initList()`函数初始化线性表,然后调用`printList()`函数输出线性表中的元素。接着,我们通过`scanf()`函数从标准输入中读取一个整数作为待插入元素,并调用`insertElem()`函数将它插入到线性表中。最后,我们再次调用`printList()`函数输出插入后的线性表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值