gpt4 book ai didi

C - 如果用户插入多个字符,则再次要求输入字符

转载 作者:行者123 更新时间:2023-11-30 19:54:58 24 4
gpt4 key购买 nike

编辑@我将只使用字符串,因为我似乎找不到用字符解决此问题的方法

我有以下内容:

char character;
int valid = 1;

do {

if( valid == 0 ) {
printf("ERROR");
}

valid = 1; // Validates it again if the do while loop activates

character = inputCharacter("Insert the character: ");
system("clear");

if( certainCondition ) {
valid = 0;
}

} while( valid != 1 );

输入字符为:

char inputCharacter(char* message) { // Inputs a character

char character;

printf("%s", message);
scanf(" %c", &character);

return character;

}

此函数将接受一个字符,如果它等于我之前输入的另一个字符,它将要求输入一个新字符。

我想知道的是:

是否可以检查输入的字符是否有多个字符,如果是,则要求输入新字符,同时给出“错误:仅一个字符”?

示例:

第一个字符:e

插入字符:e |错误

插入字符:easd |错误:请仅插入一个字符

插入字符:wflek |错误:请仅插入一个字符

插入字符:a | 接受

不使用字符串是否可以实现?

(如果我不能在不允许超过一个字符的情况下给出错误,那很好,但如果我能够的话那就太酷了)

最佳答案

使用 fgets() 获取一行文本并使用 sscanf() 解析该行更不容易出错。这也是一种更灵活的方法,允许在必要时多次扫描输入线。请注意,如果缓冲区中有空间,fgets() 会保留换行符。因此,一种方法是读取一行文本,并获取第一个字符和第二个字符。如果两个字符都被成功读取,并且第二个字符是 \n,则输入符合预期。

您应该始终检查确实返回值的函数的返回值。这可用于帮助验证输入。在下面的代码中,如果 sscanf() 不返回 2,则未输入字符(换行符除外)。如果扫描了两个字符,第二个字符应该是 \n;如果不是,则用户输入了多个字符(不包括换行符)。另请注意,fgets() 本身的返回值会被检查是否有错误;此处的错误会导致程序终止并显示错误消息。

#include <stdio.h>
#include <stdlib.h>

#define BUF_SIZE 1000

int main(void)
{
char c, rest;
char buffer[BUF_SIZE];

do {
printf("Please enter exactly one character: ");
if (fgets(buffer, BUF_SIZE, stdin) == NULL) {
perror("Error in fgets()");
exit(EXIT_FAILURE);
}
} while ((sscanf(buffer, "%c%c", &c, &rest) != 2) ||
(rest != '\n'));

printf("You entered: %c\n", c);

return 0;
}
Sample program interaction:

Please enter exactly one character:
Please enter exactly one character: fgh
Please enter exactly one character: h
You entered: h

关于C - 如果用户插入多个字符,则再次要求输入字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44553247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com