C++ 用do-while循环编写该算法

C++ 用do-while循环编写该算法,c++,algorithm,for-loop,do-while,C++,Algorithm,For Loop,Do While,我正在尝试解决,“你的车在这里”问题可以通过以下算法解决: #include <iostream> #include <conio.h> using namespace std; int Calculated(char * calc_me); int main() { char * comet_name = (char*)calloc(sizeof(char), 7); if (comet_name == NULL) {return 0;} c

我正在尝试解决,“你的车在这里”问题可以通过以下算法解决:

#include <iostream>
#include <conio.h>
using namespace std;

int Calculated(char * calc_me);

int main() {
    char * comet_name = (char*)calloc(sizeof(char), 7);
    if (comet_name == NULL) {return 0;}
    char * group_name = (char*)calloc(sizeof(char), 7);
    if (group_name == NULL) {free(comet_name); return 0;}

cout << "Enter the name of the comet: ";
cin >> comet_name;
cout << "Enter the name of the group: ";
cin >> group_name;

if ((Calculated(comet_name) % 47) == (Calculated(group_name) % 47)) {
   cout << "GO";
}
else {
     cout << "STAY";
}
 free (group_name);
 free (comet_name);
 return 0;
}

int Calculated (char * calc_me) {
    int i;
    int total = 1;
    for (i = 0; i < 7; i++) {
        if (calc_me[i] == '0') {break;}
        total *= calc_me[i] - 64;
    }
    getch();
    return total;

}
抽象的 USACO


在下面的代码段中,您需要先用一个值初始化
i
,然后才能执行
i+=1
。在for循环中的for语句中执行此操作,类似地,也需要在do while循环中执行此操作

int i = 0;  // initialize to 0
int total = 0;
do
{
    total *= calc_me[i] - 64;

    i += 1;

}while(i < 7);
int i=0;//初始化为0
int-total=0;
做
{
总计*=计算单位[i]-64;
i+=1;
}而(i<7);
啊!!找到了

您已将
总计初始化为0
。因此,每次乘法都变成0,因此函数总是返回0

将总变量初始化为
1
,它应该可以工作

if (calc_me[i] == '0') {break;}
应该读

if (calc_me[i] == '\0') {break;}
您的do-while版本中缺少该条件,以及
i
的初始化

但主要问题是您将
total
的初始值从1更改为0:

 int total = 0;
所以这条线

 total *= calc_me[i] - 64;

不断将零乘以下一个值。

要求人们发现代码中的错误并不是特别有效。您应该使用调试器(或添加打印语句)来隔离问题,然后构造一个。您能提供示例输入和预期输出吗@罗宾问题更新了你知道做更多的工作和思考是被推荐的。就这样?它不起作用了?没有其他信息吗?我该怎么帮你说“这不管用”。这是运行时错误还是编译错误?编译器在说什么?您忘记了“if(calc_me[i]='0')中断”;在这种情况下,这是您的逻辑错误。或者尝试JCash建议的方法,或者在调试器中逐步检查代码并检查变量。假设我们不需要if语句,我以前尝试过您的解决方案,xbonezI在我的代码中做到了这一点谢谢问题解决问题解决问题解决谢谢
if (calc_me[i] == '\0') {break;}
 int total = 0;
 total *= calc_me[i] - 64;