Member 13932101 Ответов: 2

Что не так в моем коде на языке Си?


Что не так в моем коде на языке Си? Я хочу создать программу, в которой компилятор считывает символы с клавиатуры до тех пор, пока последние три прочитанных символа не составят слово A P H. отобразите количество прочитанных символов. (Читайте не более 25 символов)
и я также не могу заставить его читать символы, введенные иначе, чем APH.

Что я уже пробовал:

#include<stdio.h>
#include<string.h>
int main()
{
	int i,j,Count=0,length=0;
	int n=25;																				// 'n' is for setting Limit of maximum characters to entered
	char Letters[n];
	printf("Enter Characters: ");
	gets(Letters);
	while(Letters[length]!=0)																// WHILE Loop for counting number of characters entered
	{
		length++;
	}
	if(length<=n)																			//IF-ELSE for checking whether the characters-------
	{																						//  --------------entered are within th limit or not
	while(i<n)
	{
		i=Count;
		if(Letters[i]=='A' && Letters[i+1]=='P' && Letters[i+2]=='H' && length==Count+3)		// IF-ELSE Loop for differentiating between---- 
		{																						// --------characters having 'APH' in it`s last
			printf("\n");
			Count=Count+3;																		// Addition of '3' for including 'APH' in counting
			printf("Characters Read: %d",Count);
			break;
		}
		else
		{
		
		  Count=i+1;
	}   }
	}
	else
	{
		printf("You have entered more than %d characters",n);
	}
}

2 Ответов

Рейтинг:
1

OriginalGriff

Это какой - то запутанный код, который у вас там есть...
Count начинается с нуля, i не инициализируется.
Итак (в зависимости от вашего компилятора) значение i неизвестно, когда вы впервые используете его:

while(i<n)
Так что это непредсказуемо, если он когда-нибудь попадет в петлю!
Попав в петлю, он становится еще более странным: охранник петли i перезаписывается с помощью Count, и Count затем устанавливается значение на единицу больше, чем в конце, но в середине вы использовали i +1 и +2 (что означает, что индекс массива может превышать n) и делать что-либо только в том случае, если Count это специфическое значение.

Таким образом, у вас есть две переменные, делающие одно и то же, более или менее, за исключением того, что вам вообще не нужно использовать цикл, вы можете просто проверить последние три символа без него...

И тогда вы обрабатываете только одну входную строку, нет никакого цикла для повторения в первой записи, не заканчивающейся последовательностью...

Если бы я был на вашем месте, я бы сел и подумал о том, чего именно вы пытаетесь достичь, а затем написал функцию с двумя параметрами: входной строкой и "контрольной строкой", которую он сделал один тест, чтобы увидеть, заканчивается ли один другим. Тщательно протестируйте это, а затем постройте остальную часть кода, вызывая это, и ваше приложение должно быть намного понятнее и проще для чтения (и записи!).


Рейтинг:
1

Patrice T

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Обратная сторона этого решения:
- Это DIY, вы один отслеживаете проблему и находите ее корни, которые ведут к решению.
Положительная сторона этого решения:
- Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.

Вторичное воздействие
- Вы будете гордиться тем, что сами находите Жуков.
- Ваши навыки обучения улучшатся.

Вы должны довольно быстро найти, что не так.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.