Другие языки программирования и технологии
Язык Си. Массивы и циклы. Что не так в этом коде?
/* Программка должна принимать символы и выводить их в обратном порядке */ /* При вводе символов в консоль ничего не происходит вообще. Пробовал и 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; }
ох чувак, это безумие=)
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 вечных циклов.
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 вечных циклов.
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();
}
#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 в первом цикле.
Похожие вопросы
- Язык СИ. Массивы Ребят, как на Си написать сортировку массива от меньшего к большему?
- помогите пожалуйста проверить код на языке си, программа работает неверно - не выдает сумму массива Z
- Язык си, двухмерный массив и функция.
- Язык Си: В одномерном массиве, состоящем из n вещественных элементов, вычислить: номер максимального по модулю элемента
- Помогите.Массивы.Язык Си.
- Поменять местами первый и последний отрицательные элементы массива B (18). (Язык Си) (Язык Си)
- Помогите с массивом и сортировкой методом пузырька в языке Си! Прогу надо сдать в пятницу срочно, не знаю как начать!
- Язык Си|Будет ли ошибкой, если я буду увеличивать размер массива по мере ввода в него?
- Язык си, не понял несколько моментов по массивам и строкам
- Двумерный массив. Язык Си.