gpt4 book ai didi

c - Do-while 循环 - 终止条件有什么问题?

转载 作者:行者123 更新时间:2023-11-30 16:56:50 26 4
gpt4 key购买 nike

所以我最近开始学习 Steven Kochan 的“Programming in C”一书,目前正在学习第 8 章 - “函数”。我在练习 8.16 时遇到问题:“修改程序8.14,以便用户可以转换任意数量的整数。使当输入零作为值时程序终止的规定要转换的数字。”

程序8.14的代码如下:

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

int convertedNumber[64];
long int numberToConvert;
int base;
int digit = 0;

void getNumberAndBase(void)
{
printf("Number to be converted? ");
scanf("%li", &numberToConvert);

printf("Base? ");
scanf("%i", &base);

if ( base < 2 || base > 16)
{
printf("Bad base - must be between 2 and 16\n");
base = 10;
}
}

void convertNumber(void)
{
do
{
convertedNumber[digit] = numberToConvert % base;
digit++;
numberToConvert /= base;
}
while ( numberToConvert != 0);
}

void displayConvertedNumber (void)
{
const char baseDigits[16] =
{ '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

int nextDigit;

printf ("Converted number =");

for (--digit; digit >= 0; digit--)
{
nextDigit = convertedNumber[digit];
printf("%c", baseDigits[nextDigit]);
}
printf("\n");
}

int main (void)
{
void getNumberAndBase (void), convertNumber(void),
displayConvertedNumber (void);

getNumberAndBase();
convertNumber ();
displayConvertedNumber ();

return 0;
}

我的想法最初是在主函数中的三个函数周围使用 do-while 循环,如下所示:

do
{
getNumberAndBase();
convertNumber ();
displayConvertedNumber ();
}
while ( numberToConvert != 0);

但显然它不起作用。这是本章的最后一个练习,我设法完成了剩下的部分,但我无法弄清楚这里出了什么问题。也许我只是错过了一些明显的东西。

最佳答案

当测试您的 do-while 条件时,它始终为零。 convertNumber() 方法有自己的 do-while,它会一直持续到 numberToConvert 为零。

do
{
getNumberAndBase();
convertNumber (); // Sets numberToConvert to zero before returning
displayConvertedNumber ();
}
while ( numberToConvert != 0);

void convertNumber(void)
{
do {
...
} while ( numberToConvert != 0);
}

部分问题在于成员变量被用来传递方法的返回值。这些方法具有不明显的副作用。

考虑从方法中返回值。

long int numberToConvert = 0;
do
{
numberToConvert = getNumberAndBase();
long int convertedNumber = convertNumber( numberToConvert );
displayConvertedNumber ( convertedNumber );
}
while ( numberToConvert != 0);

现在,局部变量 numberToConvert 不受 ConvertNumber() 方法的影响,您可以从局部上下文确定循环行为。

关于c - Do-while 循环 - 终止条件有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39780350/

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