Member 13274680 Ответов: 3

Пожалуйста, проверьте мою кодировку палача, пожалуйста


Я пытался закодировать игру hangman на языке Си для своих школьных заданий, но это не сработало..
А моя способность к кодированию-полная катастрофа...OMG и срок сдачи - это воскресенье...
когда я играю код, он звучит так;

dog
a
*
NONONOr
NONONONONONONOd
NONONONONONONONONONONOg
NOYES*NONONONONONONONONONONONONOa
NONONONONONONONONONONONONONONONONONONO


Я покажу код ниже..

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

Я попытался показать слово как "* * * * * " в начале, и вы должны сначала ввести слово, которое будете использовать в игре.
И есть только 10 шансов угадать. если вам не удастся угадать ответ в 10 раз, компьютер должен показать на экране "Fail". Или, если вы добьетесь успеха, компьютер покажет "успех". Но это совсем не работает, и я не знаю, в чем проблема. Ниже приведен код




<pre>nclude <stdio.h>
#include <string.h>

int main(void)
{
	char arr[100];	
	int l, i, j, u, p;
	
	scanf("%s\n",arr);	
	l=strlen(arr);		 
	char blank[l]={"*"};	
	printf("%s\n" ,blank);
	
	for(i=1; i<=10; i++)	
	{
		scanf("%c", &u);	 
		
		for(j=1; j<=i; j++)
		{
			if(u==arr[j])	
			{
				blank[j]=u;
				printf("YES");	
				printf("%s", blank);
			}
			
			else
			{
			printf("NO"); 	 
			}
	
		}
	}
    		if (strcmp("arr", "blank")==0)	
			{ 

     				 printf("Success");		
					printf("%s", blank);	 					
           	 				            
    
			if(i==10)    		  
           	{
				 printf("Fail");	
			}
	return 0;
}

3 Ответов

Рейтинг:
1

OriginalGriff

Начните с того, что перестаньте паниковать - это никогда не поможет. Успокойся, расслабься и включи свой мозг! :смеяться:

Первое, что нужно сделать, это научиться использовать отладчик: я не могу дать вам явных инструкций, потому что не знаю, какую систему вы используете, и все они работают по-разному, но все они имеют одни и те же основные функции. Погуглите Название вашей системы разработки (Visual Studio, Turbo C, что угодно) и "отладчик", и вы довольно легко найдете инструкции.
Начните с трех вещей, которые отладчик может сделать для вас:
1) точка останова: когда приложение работает в отладчике и достигает строки с точкой останова, оно останавливается и передает Управление вам. Поставьте точку останова в вашем коде на этой строке:

l=strlen(arr);
и с тобой все будет в порядке.
2) переменные: как только отладчик передал вам Управление, вы можете использовать его для просмотра переменных и их содержимого-даже во время выполнения кода!
3) Шаг: вы можете сказать отладчику "выполнить следующую строку кода", и он это сделает.

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

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но к более ранним стадиям вы придете позже): тестирование и отладка.

Начните с рассмотрения того, что он делает и чем это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:
Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его-он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он где-то здесь:
private int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему.

Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она на самом деле делала, когда вы использовали кнопку "шаг вперед" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?

Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он совершенствуется только при использовании!

Да, я, наверное, мог бы сказать вам, в чем "проблема" - но сделать это самому несложно, и при этом вы узнаете что-то действительно стоящее!


Member 13274680

Я использую Dev C++. Будет ли отладчик работать так же и в этой программе?
Кстати, спасибо за добрый комментарий:) Я действительно Новичок в кодировании, и ваш комментарий придал мне смелости :D Спасибо!!!

OriginalGriff

Да-google для "Dev c++ debugger", и вы получите массу полезной информации.

Пожалуйста!

Member 13274680

Я использовал шаги этого видео для отладки своего кода: https://www.youtube.com/watch?v=kHFpzxMFB3E

но "системный" код не работает в моей программе. Не могли бы вы сказать мне, в чем проблема?

OriginalGriff

Нет - у меня нет Dev++.
Игнорируйте видео на YouTube - они в основном сделаны идиотами, которые понятия не имеют, о чем говорят.
Основы описаны в первом Google text hit:

http://eilat.sci.brooklyn.cuny.edu/cis1_5/HowToDebug.htm

Что должно подсказать вам, что вы хотите сделать.
Если это не поможет, вы должны сказать нам, что такое " системный код "и как он" не работает " - мы не можем видеть ваш экран!

Рейтинг:
0

RAMASWAMY EKAMBARAM

используйте gotoxy (), чтобы расположить курсор там, где вы хотите - printf () печатает, начиная с этой позиции.


Если ваш компилятор в windows не поддерживает функцию gotoxy (), используйте:

#include <windows.h>
COORD coord;
  coord.X = <column>;
  coord.Y = <row>;
  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

Вы можете напечатать "* * * * * * " после использования функции gotoxy () (или приведенной выше функции)

Используйте getch (), который не повторяет символ, и если он действителен (часть слова), замените '*' в соответствующей позиции этим введенным символом снова с помощью gotoxy () перед использованием printf("%c", <keyed_in_char>).

Используйте gotoxy для получения пользовательского ввода только в фиксированной строке / столбце (используйте getch () #include < conio.h> Для этой цели)

Точно так же используйте gotoxy (), чтобы напечатать ваши "Да", "нет", "успех" в фиксированном положении на экране. Ваш экран может быть примерно таким (при условии, что пользователь правильно угадывает T, G, R в слове тигр):

Слово: "Т*Г*Р"

Обратная связь: да/нет / успех

Введите свой символ:

Таким образом, вы будете использовать только 3 строки на экране.
Кстати, как у вас может быть strcmp ("arr", "blank") - вы намеревались strcmp(arr, blank).

Только 1 совет:
вы кодируете:
gotoxy(5, 10);  // column 5, row 10 col/ row values are 1 (and not 0) based
printf("Feedback: %-7s", "NO"); //  (or "YES" or "Success")
/* printing left justified in field width of 7 (length of "Success" the longest word of the 3) (%-7s) will pad with spaces and erase all previous output
*/

Позже, когда вы улучшите свои навыки, вы можете улучшить свою программу и даже символически повесить пользователя, нарисовав фигурку палочки (опять же вам понадобится gotoxy () или обходная функция Windows - bcc32 для Windows по-прежнему поддерживает gotoxy (), но GCC этого не делает)


Member 13274680

Спасибо:D Я попробую этот код и оставлю комментарий позже!! Кстати, а "готокси" - это тоже своего рода функция?

RAMASWAMY EKAMBARAM

gotoxy () - это функция, реализованная во всех компиляторах C для MS-DOS. Возможно, он все еще присутствует в компиляторах Linux. Borland C++ freeware compiler v5. 5 (bcc32), который работает в консоли Windows, по-прежнему поддерживает gotoxy ().

Рейтинг:
0

Patrice T

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

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

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Member 13274680

Спасибо:D Я попробую использовать отладчик!!!