Другие языки программирования и технологии

Язык Си. Массивы и циклы. Что не так в этом коде?

/* Программка должна принимать символы и выводить их в обратном порядке */ /* При вводе символов в консоль ничего не происходит вообще. Пробовал и getchar() и scanf() вместо getche(). Не знаю, в чем дело. */ #include<stdio.h> #include<conio.h> int main() { int ch[30]; int i = 0; int counter; printf("Enter your name.\n"); printf("Let me know when finished by entering *:\n"); while(i != '*'); { ch = getche(); i++; } printf("\nNow I will put the characters reverse...\n"); i-- ; /* здесь это два минуса, можно спутать с тире из-за мелкого шрифта */ counter = i; while(counter != -1) { printf("%c", ch); i--; } return 0; }
Ilia Kovarsky
Ilia Kovarsky
6 985
ох чувак, это безумие=)
while(i != '*'); <------------точка с запятой говорит о том что тело цикла закончилось. это выполняется вечно=)
{
ch = getche(); <---------ch - массив, гетч прочитал очередной символ, который должен стать очередным элементом массива
// ch=getche();
i++;
}
в while(i!='*') почему сравниваем i? i - это индекс, сравнивать нужно "ch"
а еще можно заметить что условие выхода из цикла никогда не выполнится - ввели мы звездочку, i увеличили, теперь * на i-1 месте, а на i что? правильно - неизвестно что.
переменная count зачем-то вводится, ставится в условие цикла и не когда не меняется в его теле. еще один вечный цикл. (идем на рекорд=) )
и опять при выводе обращаемся к ch вместо ch
Николай поступил разумно - проще переписать. Рабочая версия с сохранением курса автора:

#include<stdio.h>
#include<conio.h>

int main()
{
char ch[30];
int i = 0;

printf("Enter your name.\n");
printf("Let me know when finished by entering *:\n");

do
{
ch= getche();
i++;
} while (ch[i-1] != '*');

printf("\nNow I will put the characters reverse...\n");

i-- ;
while(i != -1)
{
printf("%c", ch);
i--;
}

return 0;
}

в более номальном форматировании ссыль

круто, половина символов скушалась (индексы) . извиняюсь за гон про массивы, видать произошло тоже самое=)
что в общем то не отменяет 3 вечных циклов.
Паша Diagen
Паша Diagen
599
Лучший ответ
Ilia Kovarsky Спасибо, чувак! На счет матчасти, рассмешил. Да я действительно не знаком с массивами. Знаю, что нагородил черте знает что, но за ответ еще раз спасибо! Сам удивляюсь как это я не заметил точку с запятой в конце условия цикла.
#include <stdio.h>
#include <conio.h>

void main()
{
char Array[30];
int k = 0;

printf("\n Enter please your symbols: ");

while (k < 30)
{
Array[k] = getchar();
k++;
}

printf("\n");

for (int n = 29; n >= 0; n--) printf("%c", Array[n]);

getch();
}
Ilia Kovarsky Да. Я заметил свою ошибку. Тип переменной ch у меня int. Кроме того я обнаружил, что лучше воспользоваться do while или for в первом цикле.