gpt4 book ai didi

c - 使用 scanf 或 fgets 在 c 中的函数中获取特定的用户输入和参数计数?

转载 作者:行者123 更新时间:2023-11-30 19:10:38 25 4
gpt4 key购买 nike

我正在尝试使用 scanffgets 将用户输入获取到函数中。

我正在写C。

用户必须输入 2 个(正)整数。两者之差必须为 1。我必须检查实际上是否只给出了 2 个参数。

该函数应返回给定整数中较小的一个,如果:

  • 给定参数计数 == 2

  • 差异实际上是 1

如果满足以下条件,该函数应返回 -1:

  • 参数计数!= 2
  • 差异 > 1

如果满足以下条件,该函数应返回 -2:

  • 两个给定的参数具有相同的值

我在比较整数并返回正确的值时没有问题,我的问题在于输入。到目前为止,我已经尝试过这种方法:

1.)

int getInput(){
int user_input_nod_1;
int user_input_nod_2;
scanf("%d %d",&user_input_nod_1,&user_input_nod_2)
(...)
}

这里的问题是我无法知道用户是否输入了超过 2 个整数。

2.)

int getInput(){
int user_input_nod_1;
int user_input_nod_2;
char user_input_over;
scanf("%d %d",&user_input_nod_1,&user_input_nod_2)
scanf("%c",&user_input_over)
if(user_input_over != '\0'){
return -1;
}
(...)
}

如果给出两个以上参数,程序将返回 -1,并且在给出两个参数时完美运行,但如果仅给出一个 scanf 则会等待第二个输入直到无穷大(即使在按 Enter 键之后) )。用户知道如何结束流(cmd+d,...)

3.)

int getInput(){    
char input_nods[10];

if(fgets(input_nods, 10, stdin) != NULL)
{
puts(input_nods);
}

char input_c1;
char input_c2;
char input_nod_over;

sscanf(input_nods,"%c %c %c",&input_c1, &input_c2, &input_nod_over);

char *nod_check_1, *nod_check_2;
int input_nod_1 = strtol(&input_c1, &nod_check_1, 10);
int input_nod_2 = strtol(&input_c2, &nod_check_2, 10);

if (input_nod_over != '\0' || input_nods[2] == ' ' || input_nods[2] == '\0')
{
return -1;
}
}

当给定 0-9 范围内的整数时,这非常有效。一旦输入有两个数字,sscanf 就会与 fgets 保存在 input_nodes[] 中的空格搞乱。

有没有办法可以实现我想要的目标?谢谢。

最佳答案

我现在使用这个循环实现了它:

int user_input_nod_1;
int user_input_nod_2;

char buf[BUFSIZ], junk[BUFSIZ];

fprintf( stderr, "> " );
while ( fgets( buf, sizeof(buf), stdin ) != NULL )
{
if ( sscanf( buf, "%i%i%[^\n]", &user_input_nod_1, &user_input_nod_2, junk ) == 2 )
break;
fprintf( stderr, "[ERR] \n" );
fprintf( stderr, "> " );
}

(使用“>”作为某种光标...)

关于c - 使用 scanf 或 fgets 在 c 中的函数中获取特定的用户输入和参数计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41044069/

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