Ваш код, вероятно, является одним из худших кусков кода C, который я когда-либо видел (без обид, каждый должен когда-нибудь учиться).
Имеются синтаксические ошибки (возможно, проблема с копированием / вставкой), логические проблемы, бессмысленное запутывание, неправильные методы (глобальные переменные), переполнение буфера (atoi используется на символе, где нет места для хранения завершающего нулевого байта), неинициализированные значения (Count_22), удивительное соглашение об именах (смешанные CamelCase и подчеркивание, переменные и функции, начинающиеся с заглавной буквы), бесконечный цикл, без заголовка, и я забыл некоторые.
Более того, если вы хотите, чтобы кто-нибудь помог вам отладить этот код, вы должны в списке сказать, что он должен делать ...
Чтобы ответить на оригинальный вопрос: почему Count_22 никогда не увеличивается?
Потому что Is_Milestone всегда false (с изменением @Jay или без него). Намерением Is_Milestone является сравнение десятичного значения строки «22» с целым числом 21 (или 1, логический результат 21 == 1) в зависимости от версии.
Это логично из-за поведения Advance_String. и потому что String имеет плохое начальное значение (вероятно, должно быть char String[3] = "00";
) и из-за теста Value! = 7. Я думаю, вы хотели сравнить цифру с 7, но atoi работает с полной строкой. Еще одно небольшое изменение для достижения этого Atoi_val = atoi(String+1);
в теле вашего цикла. С другой стороны, вы не увидите ничего, поскольку цикл никогда не останавливается и никогда ничего не печатает.
Если это первая попытка выполнения упражнения, данного каким-либо учителем (что-то вроде «программирования двузначного счетчика в базе 7» или аналогичного). Вам следует подумать о том, чтобы вообще не использовать atoi и преобразовывать цифры в цифры, используя что-то вроде:
digit_value = char_value - '0';
пример:
char seven_as_char = '7';
int seven_as_int = seven_as_char - '0';
Если вы можете объяснить, что вы на самом деле пытаетесь сделать, мы можем показать вам простой пример кода вместо ужаса, который вы пытаетесь отладить.
EDIT
Это действительно проще с оригинальным кодом ...
После прочтения источника Ada я могу подтвердить, что это действительно восьмеричный счетчик на основе Ascii. Исходный код уже плохого качества, и это частично объясняет плохое качество получающегося кода C.
Возможный прямой порт может выглядеть следующим образом (но все же требуется серьезная очистка, чтобы он выглядел как собственный код C ... и в любом случае он довольно тупой, поскольку печатает константу):
#include <stdio.h>
#include <stdlib.h>
void Advance_String(char * P1)
{
if((P1[1]-'0') != 7){
P1[1]++;
}
else{
P1[1] = '0';
P1[0]++ ;
}
}
int Is_Milestone(char * P1, int P2)
{
return (atoi(P1) > P2);
}
main()
{
int Count_11 = 0;
int Count_22 = 0;
int Count_33 = 0;
int Count_44 = 0;
char S[3] = "00";
int cont = 1;
while(cont)
{
if(Is_Milestone(S, 10)){
if(atoi(S) == 11){
Count_11 = Count_11 + 1;
}
if(Is_Milestone(S, 21)){
if(atoi(S) == 22){
Count_22 = Count_22 + 1;
}
if(Is_Milestone(S, 32)){
if(atoi(S) == 33){
Count_33 = Count_33 + 1;
}
if(Is_Milestone(S, 43)){
if(atoi(S) == 44){
Count_44 = Count_44 + 1;
}
if (atoi(S) == 77){
cont = 0;
}
}
}
}
}
Advance_String(S);
}
printf("result = %d\n", Count_11 + Count_22 + Count_33 + Count_44);
}