尝试编写 fgets 函数的一个新版本 tfgets——tfgets 函数的输入与 fgets 函数一致。) 如果用户连续输错三次,则尝试使用非本地跳转,给出提示, 并不允许该用户再次尝试。
时间: 2023-08-22 10:25:09 浏览: 74
以下是一个实现 tfgets 函数的示例代码,它与 fgets 函数具有相同的输入和输出,并且在用户连续输入三次错误时会禁止用户再次尝试。
```c
#include <stdio.h>
#include <setjmp.h>
#define MAX_ATTEMPTS 3
int tfgets(char *s, int size, FILE *stream) {
static jmp_buf buf;
static int attempts = 0;
int ret;
if (setjmp(buf)) {
fprintf(stderr, "You have exceeded the maximum number of attempts.\n");
return EOF;
}
ret = fgets(s, size, stream) != NULL;
if (!ret) {
attempts++;
if (attempts == MAX_ATTEMPTS) {
longjmp(buf, 1);
}
} else {
attempts = 0;
}
return ret;
}
```
该函数的实现使用了 C 语言的非本地跳转机制 `setjmp` 和 `longjmp`。当用户连续输入三次错误时,`longjmp` 跳转到 `setjmp` 的位置,从而实现了禁止用户再次尝试的功能。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)