gpt4 book ai didi

c - 如何正确提示用户输入,直到他们给出有效响应

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:45 25 4
gpt4 key购买 nike

我想打印一条提示信息到标准输出,然后读取来自用户输入的标准输入的值(例如,数字)。

如果用户输入了无效值,我想再次打印提示,并且再次阅读他们的回复,直到他们输入有效值(有点像 shells工作)。

问题是当用户输入无效值时,提示莫名其妙被打印两次,这不是我想要的。

到目前为止,这是我尝试过的,但没有成功:

#include <stdio.h>

const char *prompt = "(Enter 1 to continue)> ";

int get_resp1(void)
{
int r;
fputs(prompt, stdout);
r = getchar() - '0';
if (r != 1)
r = get_resp1();
return r;
}

int get_resp2(void)
{
int r;
r = getchar() - '0';
if (r != 1) {
fputs(prompt, stdout);
r = get_resp2();
}
return r;
}

int get_resp3(void)
{
int r;
fputs(prompt, stdout);
do {
r = getchar() - '0';
if (r != 0)
fputs(prompt, stdout);
} while (r != 1);

return r;
}

int main(void)
{
int response;
/* First attempt: */
/* response = get_resp1(); */

/* Second attempt */
/* fputs(prompt, stdout); */
/* response = get_resp2(); */

/* Third attempt: */
/* response = get_resp3(); */

return response != 1;
}

这是我想要的结果:

(Enter 1 to continue)> 2
(Enter 1 to continue)>
(Enter 1 to continue)> 1

在第一行,我们输入除 1 之外的其他内容,在第二行行,我们输入一个空行,最后,我们输入 1。

但这是我得到的结果(使用所有三种方法):

(Enter 1 to continue)> 2
(Enter 1 to continue)> (Enter 1 to continue)>
(Enter 1 to continue)> 1

注意提示在第二行打印了两次。

最佳答案

如前所述,如果输入包含值 1(具有零个或多个空格或制表符),那么它将被接受。任何其他字符组合都将被丢弃。

您可以更改代码以更改行为。这只是尝试使用问题中的 OP 预期的类似处理来演示 OP。

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdbool.h>

#define MAXBUFFSIZE 100
bool getConfirmation(){
printf("\n%s",">> ");
char buff[MAXBUFFSIZE];
unsigned int success = 0;
while( 1 ){
success = 0;
if( fgets(buff,MAXBUFFSIZE,stdin) == NULL){
fprintf(stderr, "%s\n", "Error in input");
break;
}

for( size_t i = 0; i < strlen(buff); i++){
if(isspace(buff[i]))
continue;
else if( isalpha(buff[i]))
break;
else if( isdigit(buff[i]) ){
if( buff[i] == '1'){
success++;
if( success > 1)
break;
}
else{
success = 0;
break;
}
}
}
if( success == 1 )
break;
success = 0;
printf("\n%s",">> ");
}
if( success == 0)
return false;
return true;
}
int main(){

if( getConfirmation() == true )
printf("%s\n","Continued ... ");
else
printf("%s\n","Error in input");
return 0;
}

关于c - 如何正确提示用户输入,直到他们给出有效响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47610478/

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