尝试编写 fgets 函数的一个新版本 tfgets——tfgets 函数的输入与 fgets 函数一致。) 如果用户连续输错三次,则尝试使用非本地跳转,给出提示, 并不允许该用户再次尝试。
时间: 2023-08-22 14:25:20 浏览: 146
fgets函数与fputs函数
以下是一个可能的 tfgets 函数实现,它与 fgets 函数的输入一致,并带有错误超过三次时的提示和非本地跳转功能。
```c
#include <stdio.h>
#include <setjmp.h>
jmp_buf buf;
char *tfgets(char *s, int size, FILE *stream)
{
static int num_tries = 0;
char *result = fgets(s, size, stream);
if(result == NULL) {
if(++num_tries >= 3) {
printf("Too many failed attempts. Exiting...\n");
longjmp(buf, 1);
}
printf("Failed attempt %d. Please try again.\n", num_tries);
return tfgets(s, size, stream);
}
num_tries = 0;
return result;
}
int main()
{
char buffer[256];
if(setjmp(buf) == 0) {
printf("Please enter a string: ");
tfgets(buffer, 256, stdin);
printf("You entered: %s", buffer);
}
return 0;
}
```
该函数通过记录用户失败的尝试次数来实现错误超过三次时的提示和非本地跳转。如果 fgets 函数返回 NULL 并且尝试次数小于三次,则打印错误消息并再次调用 tfgets 函数。 如果尝试次数超过三次,则打印错误消息并使用 longjmp 函数跳转到 setjmp 函数所设置的位置,从而结束程序。
阅读全文