请检查我的刽子手编码 [英] Please check my hangman coding please

查看:49
本文介绍了请检查我的刽子手编码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试在C语言中为我的功课编写刽子手游戏,但它不起作用..

我的编码能力是完全灾难...... OMG和截止日期是这个星期天.. 。

当我播放代码时,就像这样;



I tried to code hangman game in C for my schoolwork, but it doesn't work..
And my coding ability is total disaster...OMG and due date is this sunday...
when I play the code, it goes like this;

dog
a
*
NONONOr
NONONONONONONOd
NONONONONONONONONONONOg
NOYES*NONONONONONONONONONONONONOa
NONONONONONONONONONONONONONONONONONONO





我会在下面显示以下代码..



我尝试了什么:



我试图在开始时将这个单词显示为'*****',你应该首先输入你将在游戏中使用的单词。

并且只有10猜测的机会。如果您未能在10次内猜出答案,则计算机需要在屏幕上显示失败。或者如果您成功,计算机将显示成功。但它根本不起作用,我不知道是什么问题。下面是代码











I'll show the code below..

What I have tried:

I tried to show the word as '*****' at the start, and you should type the word first that you will use at the game.
And there's only 10 chances for guessing. if you fail to guess the answer in 10 times, the computer needs to show 'Fail' at the screen. Or if you success, computer will show 'Success'. But it doesn't work at all, and I don't know what's the problem. There is the code below




<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;
}

推荐答案

从停止恐慌开始 - 它从来没有帮助。冷静下来,放松,并吸引你的大脑! :笑:



首先要做的是学习使用调试器:我不能给你明确的指示,因为我不知道你使用的是什么系统它们的工作方式各不相同,但它们都具有相同的基本功能。谷歌的开发系统的名称(Visual Studio,Turbo C,无论如何)和调试器,你应该很容易找到说明。

从调试器可以为你做的三件事开始:

1)断点:当应用程序在调试器中运行并且它到达带有断点的行时,它会停止,并将控制传递给您。在你的代码中放置一个断点:

Start by stopping panicking - it never helps. Calm down, relax, and engage your brain! :laugh:

The first thing to do is learn to use the debugger: I can't give you explicit instructions because I don't know what system you are using and they all work differently, but they all have the same basic features. Google for the name of your development system (Visual Studio, Turbo C, whatever) and "debugger" and you should find instructions pretty easily.
Start with three things the debugger can do for you:
1) Breakpoint: when the application is running in the debugger and it reaches a line with a breakpoint, it stops, and passes control to you. Put a breakpoint in your code on this line:
l=strlen(arr);

你会没事的。

2)变量:一旦调试器将控制权传递给您,您就可以使用它来查看变量及其内容 - 即使在运行代码时也是如此!

3)步进:你可以告诉调试器执行下一行代码,它会。



将开发过程想象成编写电子邮件:成功编译意味着你编写了用正确的语言发送电子邮件 - 英语,而不是德语 - 不是电子邮件中包含您要发送的邮件。



所以现在你进入第二阶段开发(实际上它是第四或第五,但你会在之后的阶段进入):测试和调试。



首先看看它做了什么,以及它与你想要的有何不同。这很重要,因为它可以为您提供有关其原因的信息。例如,如果程序旨在让用户输入一个数字并将其翻倍并打印答案,那么如果输入/输出是这样的:

and you'll be fine.
2) Variables: once the debugger has passed control to you, you can use it to view the variables and their content - even while you run the code!
3) Stepping: you can tell the debugger "execute the next one line of code" and it will.

Think of the development process as writing an email: compiling successfully means that you wrote the email in the right language - English, rather than German for example - not that the email contained the message you wanted to send.

So now you enter the second stage of development (in reality it's the fourth or fifth, but you'll come to the earlier stages later): Testing and Debugging.

Start by looking at what it does do, and how that differs from what you wanted. This is important, because it give you information as to why it's doing it. For example, if a program is intended to let the user enter a number and it doubles it and prints the answer, then if the input / output was like this:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16

然后很明显问题出在将它加倍的位 - 它不会将自身加到自身上,或者将它乘以2,它会将它自身相乘并返回输入的平方。

所以,你可以查看代码和很明显,它在某处:

Then it's fairly obvious that the problem is with the bit which doubles it - it's not adding itself to itself, or multiplying it by 2, it's multiplying it by itself and returning the square of the input.
So with that, you can look at the code and it's obvious that it's somewhere here:

private int Double(int value)
   {
   return value * value;
   }



一旦你知道可能出现的问题,就可以开始使用调试器来找出原因。


在执行代码之前,请考虑代码中的每一行应该做什么,并将其与使用Step over按钮依次执行每一行时实际执行的操作进行比较。它符合您的期望吗?如果是这样,请转到下一行。

如果没有,为什么不呢?它有何不同?



这是一项非常值得开发的技能,因为它可以帮助你在现实世界和发展中。和所有技能一样,它只能通过使用来改善!



是的,我可能会告诉你问题是什么 - 但这并不难做到,并且你将同时学到一些非常值得的东西!


Once you have an idea what might be going wrong, start using the debugger to find out why.

Think about what each line in the code should do before you execute it, and compare that to what it actually did when you use the "Step over" button to execute each line in turn. Did it do what you expect? If so, move on to the next line.
If not, why not? How does it differ?

This is a skill, and it's one which is well worth developing as it helps you in the real world as well as in development. And like all skills, it only improves by use!

Yes, I could probably tell you what "the problem" is - but it's not difficult to do this yourself, and you will learn something really worthwhile at the same time!


使用gotoxy()将光标定位在你想要的位置 - printf()从那个位置开始打印。





如果Windows上的编译器不支持gotoxy(),请使用:



use gotoxy() to position the cursor where you want - printf() prints starting at that position.


If your compiler on windows does not support gotoxy() use:

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



您可以在使用gotoxy()(或以上版本)后打印******函数)



使用不回显字符的getch(),如果它有效(单词的一部分)用这个键替换适当位置的'*'在使用printf(%c,< keyed_in_char>)之前再次使用gotoxy()。



使用gotoxy仅在固定行获取用户输入/列(使用getch()#include< conio.h>用于此目的)



同样使用gotoxy()打印YES,NO,屏幕上固定位置的成功。你的屏幕可能是这样的(假设用户在单词TIGER中正确猜出T,G,R):



Word:T * G * R



反馈:是/否/成功



输入您的字符:



因此,你将只在屏幕上使用3行。

BTW你怎么能有strcmp(arr,空白) - 你打算strcmp(arr,空白)。



只需1小费:

你的代码:


You can print the "******" after using gotoxy() (or the above function)

Use getch() which does not echo the character and if it's valid (part of the word) replace the '*' in the appropriate position by this keyed in character again using gotoxy() before using printf("%c", <keyed_in_char>).

Use gotoxy to get user input only at a fixed row/column (use getch() #include <conio.h> for the purpose)

Likewise use gotoxy() to print your "YES" , "NO", "Success" at a fixed postion on the screen. Your screen can be something like this (assuming user guesses T, G, R correctly in the word TIGER):

Word: "T*G*R"

Feedback: YES/NO/Success

Enter your char:

Thus, you will be using only 3 rows on the screen.
BTW how can you have strcmp("arr", "blank") - you intended strcmp(arr, blank).

Just 1 tip:
you code:

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功能 - 用于Windows的bcc32仍支持gotoxy()但GCC不支持)


Later when you improve your skills you can enhance your program and even symbolically hang the user by drawing a stick figure (again you'll need gotoxy() or the workaround Windows function - bcc32 for Windows still supports gotoxy() but GCC doesn't)


有一个工具可以让你看看你的代码在做什么,它的名字是调试器。它也是一个很好的学习工具,因为它向你展示了现实,你可以看到哪种期望与现实相符。

当你不明白你的代码在做什么或为什么它做它做的时候,答案就是答案是调试器

使用调试器查看代码正在执行的操作。只需设置断点并查看代码执行情况,调试器允许您逐行执行第1行并在执行时检查变量。



调试器 - 维基百科,免费的百科全书 [ ^ ]



掌握Visual Studio 2010中的调试 - 初学者指南 [ ^ ]

使用Visual Studio 2010进行基本调试 - YouTube [ ^ ]

调试器在这里向您展示您的代码正在做什么,您的任务是与什么进行比较应该这样做。

调试器中没有魔法,它没有找到错误,它只是帮助你。当代码没有达到预期的效果时,你就会接近一个错误。
There is a tool that allow you to see what your code is doing, its name is debugger. It is also a great learning tool because it show you reality and you can see which expectation match reality.
When you don't understand what your code is doing or why it does what it does, the answer is debugger.
Use the debugger to see what your code is doing. Just set a breakpoint and see your code performing, the debugger allow you to execute lines 1 by 1 and to inspect variables as it execute.

Debugger - Wikipedia, the free encyclopedia[^]

Mastering Debugging in Visual Studio 2010 - A Beginner's Guide[^]
Basic Debugging with Visual Studio 2010 - YouTube[^]
The debugger is here to show you what your code is doing and your task is to compare with what it should do.
There is no magic in the debugger, it don't find bugs, it just help you to. When the code don't do what is expected, you are close to a bug.


这篇关于请检查我的刽子手编码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆