StackOverflow上的第一篇文章,所以如果我没有做好,我会道歉。我顽固的运动,我需要做一个"刽子手游戏"我试着从" .txt"文件,然后我有我的加密函数,用'*'
替换每个字母,并在'\0'
位置放置lenght+1
以结束字符串。
我遇到了问题以获得char*
的大小,我最大的问题是我无法在控制台上正确显示它,我只会打印出奇怪的符号。
这是我的代码
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
void pendu()
{
FILE *fichier = NULL;
fichier = fopen("dico.txt", "r");
if (fichier == NULL)
{
printf("Erreur ouverture du fichier");
}
int taille = get_size("dico.txt");
int nb;
srand(time(NULL));
nb = rand() % taille;
char *momo = get_word(nb, fichier);
printf("Vous allez jouer au pendu! \n");
printf("Voici le mot a trouver : \n");
int longueur = sizeof(momo); // i know size of return size in byte so may i
//do sizeof(word)/sizeof(char) ?
char *motcrypt = cryptage(momo,longueur);
printf(" %s \n", motcrypt); // here is the main Problem.
int tour = 10;
while (tour > 0)
{
char lettre;
printf(" %s \n", motcrypt);
printf("il vous reste %d tour(s) \n", tour);
printf("proposer une lettre :", tour);
scanf(" %c", &lettre); // space needed !!?!!
printf("\n");
char *motcrypt2 = motcrypt;
for (int i = 0; i < longueur; i++)
{
if (lettre == momo[i])
{
motcrypt2[i] = lettre;
}
}
if (motcrypt == motcrypt2)
{
tour = tour-1;
printf("%s", motcrypt);
}
if (motcrypt2 == momo)
{
motcrypt = motcrypt2;
printf("%s", motcrypt);
printf("Vous avez gagner! \n");
printf("Appuyer sur un bouton pour rejouer \n");
system("Pause");
}
else if (tour == 0)
{
printf("Vous avez perdu\n");
printf("Appuyer sur un bouton pour rejouer \n");
system("Pause");
pendu();
}
}
}
void main()
{
pendu();
}
编辑:这是我的&#34; cryptage&#34;功能:
char* cryptage(char *yala,int x)
{
int i = 0;
char crypted[30];
while (i < x)
{
crypted[i] = '*';
crypted[i + 1] = '\0';
i++;
}
return crypted;
}
我的加密功能可以用&#39; *&#39;替换每个字母。然后放一个&#39; \ 0&#39;在lenght + 1位置结束字符串。
PS:我希望有人解释为什么printf("%s",word)
输出的结果与printf(" %s",word)
答案 0 :(得分:2)
您的代码存在一些问题,但让我们从您的cryptage
函数开始:
char* cryptage(char *yala,int x)
{
int i = 0;
char crypted[30];
while (i < x)
{
crypted[i] = '*';
crypted[i + 1] = '\0';
i++;
}
return crypted;
}
除了错误缩进之外,您将返回一个指向数组的指针,该数组的自动存储持续时间在函数返回时超出范围。使用该指针将导致未定义的行为(包括可能是崩溃或奇怪的输出,或者偶尔出现正常工作)。您应该为crypted
动态分配存储空间(查找malloc
),或者接受指向它的指针作为参数:
char* cryptage(char *yala, int x, char *crypted)
{
int i = 0;
while (i < x)
{
crypted[i] = '*';
crypted[i + 1] = '\0';
i++;
}
return crypted;
}
这一行:
int longueur = sizeof(momo); // i know size of return size in byte so may i
...可能是为了获得momo
所指向的字符串的长度,而不是指针本身的大小。因此应该如下:
size_t longueur = strlen(momo); // i know size of return size in byte so may i
几个if
语句似乎试图比较字符串:
if (motcrypt == motcrypt2)
...但这是比较指针,而不是字符串内容。您需要使用strcmp
函数:
if (strcmp(motcrypt,motcrypt2) == 0)
您尚未显示其他各种方法的定义,因此无法为您提供完整的问题列表。当您发布到StackOverflow时,您应该发布一个完整的(但是 minimal )示例,该示例展示了该问题(请参阅MCVE)。
答案 1 :(得分:1)