gpt4 book ai didi

c - 无法在 C 中找出 while/if 循环的逻辑

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:21 26 4
gpt4 key购买 nike

我有一些代码,我遇到问题的功能是:

unsigned int getInputData() {

printf("Please input a positive integer number terminated with a carriage return.\n");

do{
scanf("%c", &input);

if(isdigit(input)) {
temp = charToInt(input);
rValue = mergeInt(rValue, temp);
}
if(rValue >= imax) {
rValue = 0;
printf("ERROR: That is too large of an integer. Please try again. \n");
}
else if(isalpha(input)){
rValue = 0;
printf("This is not a integer. Please try again. \n");
}
else{
printf("OK. This is a good number. \n");
}
} while(1);
}

我正在单独扫描每个 char,然后将其合并为一个 int。这正是我想要做的,但我只希望它在用户输入时打印 “OK。这是一个很好的数字。” 一次。示例:如果有人输入:12345 我希望它返回:“好的。这是一个很好的数字。” 这 5 个字符一次,而不是每个字符一次。希望这是有道理的,已经有一段时间了,所以任何事情都会有所帮助。

最佳答案

您的代码背后存在巨大的逻辑问题:

  • 无限循环而不检查输入结束:

你说你想在用户输入几个数字时判断这是不是一个好数字,但你一次只读一个字符,而且你没有定义数字的结尾。尽管您确实指定以回车符结尾,但您并没有以这种方式设计算法,您从不检查 \n 字符。

  • 您为 getInputData() 函数定义了一个返回值,但您从未从该函数返回。
  • 您测试 input 是否为数字以更新值,但对于错误,只有当它是字母字符时才会显示错误。

基本上,为了与您编写算法的方式保持一致,这是另一种做法:

unsigned int getInputData() {
char input;
long value=0;

do {
scanf("%c", &input);

if (isdigit(input))
value = value*10+input+'0';
else if (input == '\n')
return 1;
else
return 0;

} while(1);
}

int main() {
printf("Please input a positive integer number terminated with a carriage return.\n");

if (getInputData() == 1)
printf("OK. This is a good number.\n");
else
printf("This is not a integer. Please try again. \n");

return 0;
}

但我确实退出了无限循环以便能够检查结果。

注意:为了示例的目的,我没有检查溢出。注意 1:我一直在使用 scanf()靠近你的代码,但如果你一次只想读一个字符,最好使用 getchar()这是更简单和更快的方式。N.B.2:您还可以通过使用 scanf() 的更多功能来简化您的代码:

unsigned int getInputData() {
unsigned input;
long value=0;
int n;

do {
n = scanf("%u", &input);
if (n == 0)
return 0;
else
return 1;
} while(1);
}

您甚至可以尝试使用 GNU 扩展的 scanf("%a[0-9]")。参见 man scanf了解更多详情。

关于c - 无法在 C 中找出 while/if 循环的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21342804/

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