gpt4 book ai didi

c - C 语言的简单 GCD 程序,无法从扫描仪过滤正确的用户输入

转载 作者:行者123 更新时间:2023-11-30 20:55:01 26 4
gpt4 key购买 nike

我的程序提示用户输入两个正整数来计算他们的 GCD。从扫描仪中,程序不接受任何非正整数的输入,而是再次提示用户。

我的大部分代码已经可以正常工作。我的问题是我的程序在要求另一个正整数之前需要两个负整数输入。其他角色工作得很好。有什么建议可以解决这个小问题吗?

源代码

<小时/>
#include <stdio.h>
#include <stdlib.h>

int main() {

int temp1, temp2, A, B, C;
char str[256];

while(1){
printf("Enter a positive integer: ");
while(scanf(" %d", &A)!=1 || A <= 0) {
scanf(" %s", str);
printf("Please enter a positive integer: ");
}
if(A > 0){
break;
}
}
//same loop to get B

//compute GCD of A and B

//print out answer

return 0;
}
<小时/>

示例输出

<小时/>
Enter a positive integer: -5
-6
Please enter a positive integer: -7
-8
Please enter a positive integer: k
Please enter a positive integer: s
Please enter a positive integer: d
Please enter a positive integer: 5

最佳答案

你的程序想要读取一些东西,因为你这么说了。

试试这个:

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

int main(void) {

int temp1, temp2, scanf_ret, A, B, C;

while(1){
printf("Enter a positive integer: ");
while((scanf_ret=scanf(" %d", &A))!=1 || A <= 0) {
if(scanf_ret<0) {
puts("got unexpected EOF");
return 1;
}
if(scanf_ret==0)scanf(" %*s");
printf("Please enter a positive integer: ");
}
if(A > 0){
break;
}
}
//same loop to get B

//compute GCD of A and B

//print out answer

return 0;
}

在此代码中,

  • 如果scanf_ret1,则表示读取成功,无需消耗垃圾。
  • 如果scanf_ret0,则表示存在一些无法读取为整数的障碍物,因此请将其移除。
  • 如果scanf_ret为负数,则表示输入结束,退出程序。

另请注意,您不会存储垃圾,因此可以避免缓冲区溢出。

关于c - C 语言的简单 GCD 程序,无法从扫描仪过滤正确的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35808735/

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