C 打印错误字符的问题

C 打印错误字符的问题,c,C,我一直在玩弄一个简单的刽子手程序(新计算机科学专业)的想法,而这段代码,虽然逻辑正确,工作正常,但打印出一个奇怪的字符(╠ 确切地说)而不是像它应该的那样打印下划线(u)。这似乎只有在出现“elseif”语句时才会发生。有人知道这是什么原因吗 #include <stdlib.h> #include <stdio.h> int main(){ char w[13][3] = { { 'c', 'a', 't' }, //0 { 'd'

我一直在玩弄一个简单的刽子手程序(新计算机科学专业)的想法,而这段代码,虽然逻辑正确,工作正常,但打印出一个奇怪的字符(╠ 确切地说)而不是像它应该的那样打印下划线(u)。这似乎只有在出现“elseif”语句时才会发生。有人知道这是什么原因吗

#include <stdlib.h>
#include <stdio.h>


int main(){

char w[13][3] = {
        { 'c', 'a', 't' }, //0
        { 'd', 'o', 'g' }, //1
        { 'r', 'a', 't' }, //2
        { 'e', 'e', 'l' }, //3
        { 'c', 'o', 'w' }, //4
        { 'o', 'w', 'l' }, //5
        { 'e', 'm', 'u' }, //6
        { 'b', 'a', 't' }, //7
        { 'e', 'l', 'k' }, //8
        { 'p', 'i', 'g' }, //9
        { 'b', 'e', 'e' }, //10
        { 'h', 'e', 'n' }, //11
        { 'f', 'o', 'x' }, //12
};

char u,
    dis[100];

int random;

srand(time(NULL));
random = rand() % 13;

printf("%d\n", random); //check random number
printf("Enter a letter: ");
u = getchar();

for (int i = 0; i < 3; i++){

    if (w[random][i] == u){
        dis[i] = u;
    }
    else if (w[random][i] == '_'){
        continue;
    }
    else if (w[random][i] != u && w[random][i] != '_'){
        continue;
    }
    else {
        dis[i] = '_';
    }

}

for (int i = 0; i < 3; i++){
    printf("%c", dis[i]);
}

printf("\n\n");
system("pause");
}
#包括
#包括
int main(){
字符w[13][3]={
{'c','a','t'},//0
{'d','o','g'},//1
{'r','a','t'},//2
{'e','e','l'},//3
{'c','o','w'},//4
{'o','w','l'},//5
{'e','m','u'},//6
{'b','a','t'},//7
{'e','l','k'},//8
{'p','i','g'},//9
{'b','e','e'},//10
{'h','e','n'},//11
{'f','o','x'},//12
};
查鲁,
dis[100];
int随机;
srand(时间(空));
random=rand()%13;
printf(“%d\n”,随机);//检查随机数
printf(“输入字母:”);
u=getchar();
对于(int i=0;i<3;i++){
如果(w[随机][i]==u){
dis[i]=u;
}
else如果(w[random][i]=''.''{
继续;
}
如果(w[random][i]!=u和&w[random][i]!=''{
继续;
}
否则{
dis[i]='u';
}
}
对于(int i=0;i<3;i++){
printf(“%c”,dis[i]);
}
printf(“\n\n”);
系统(“暂停”);
}

你的第二个
否则如果
声明

else如果(w[random][i]!=u和&w[random][i]!=''''''''.'的话

大多数情况下都是真的(只要你猜不到正确的随机字母)。因为该块中唯一的语句是
continue,您的
dis[i]
未设置。您的输出正在打印尚未初始化的字符

可使用的替代实现(例如)

int-hangman=0;
char u;
int maxGuesses=10;
//种子随机部分
而(刽子手){
printf(“%d\n”,随机);//检查随机数
printf(“输入字母:”);
u=getchar();

对于(i=0;i您的第二个
else if
语句

else如果(w[random][i]!=u和&w[random][i]!=''''''''.'的话

大多数情况下都是真的(只要你猜不到正确的随机字母)。由于该块中唯一的语句是
continue;
,因此没有设置你的
dis[i]
。你的输出是打印一个尚未初始化的字符

可使用的替代实现(例如)

int-hangman=0;
char u;
int maxGuesses=10;
//种子随机部分
而(刽子手){
printf(“%d\n”,随机);//检查随机数
printf(“输入字母:”);
u=getchar();

对于(i=0;i您的第二个
else if
语句

else如果(w[random][i]!=u和&w[random][i]!=''''''''.'的话

大多数情况下都是真的(只要你猜不到正确的随机字母)。由于该块中唯一的语句是
continue;
,因此没有设置你的
dis[i]
。你的输出是打印一个尚未初始化的字符

可使用的替代实现(例如)

int-hangman=0;
char u;
int maxGuesses=10;
//种子随机部分
而(刽子手){
printf(“%d\n”,随机);//检查随机数
printf(“输入字母:”);
u=getchar();

对于(i=0;i您的第二个
else if
语句

else如果(w[random][i]!=u和&w[random][i]!=''''''''.'的话

大多数情况下都是真的(只要你猜不到正确的随机字母)。由于该块中唯一的语句是
continue;
,因此没有设置你的
dis[i]
。你的输出是打印一个尚未初始化的字符

可使用的替代实现(例如)

int-hangman=0;
char u;
int maxGuesses=10;
//种子随机部分
而(刽子手){
printf(“%d\n”,随机);//检查随机数
printf(“输入字母:”);
u=getchar();

对于(i=0;i而言,随机字符的显示由以下原因引起:

  • dis
    未初始化

  • dis[i]
    for
    循环中的两个子句中未设置为

  • for
    循环中

    for (int i = 0; i < 3; i++){
    
        if (w[random][i] == u){
            dis[i] = u;
        }
        else if (w[random][i] == '_'){
            // Missing code to set dis[i]
            continue;
        }
        else if (w[random][i] != u && w[random][i] != '_'){
            // Missing code to set dis[i]
            continue;
        }
        else {
            dis[i] = '_';
        }
    }
    
    这个条件永远不会是真的。测试用例中没有一个单词包含

    根据您的数据,在

        if (w[random][i] == u){
    

    将是真的。这意味着,最后一条

        else {
            dis[i] = '_';
        }
    
    永远不会被锻炼

    我认为您的代码可以简化为:

    for (int i = 0; i < 3; i++){
    
        if (w[random][i] == u){
            dis[i] = u;
        }
        else {
            dis[i] = '_';
        }
    }
    
    for(int i=0;i<3;i++){
    如果(w[随机][i]==u){
    dis[i]=u;
    }
    否则{
    dis[i]='u';
    }
    }
    
    随机字符的显示是由以下原因引起的:

  • dis
    未初始化

  • dis[i]
    for
    循环中的两个子句中未设置为

  • for
    循环中

    for (int i = 0; i < 3; i++){
    
        if (w[random][i] == u){
            dis[i] = u;
        }
        else if (w[random][i] == '_'){
            // Missing code to set dis[i]
            continue;
        }
        else if (w[random][i] != u && w[random][i] != '_'){
            // Missing code to set dis[i]
            continue;
        }
        else {
            dis[i] = '_';
        }
    }
    
    这个条件永远不会是真的。测试用例中没有一个单词包含

    根据您的数据,在

        if (w[random][i] == u){
    

    将是真的。这意味着,最后一条

        else {
            dis[i] = '_';
        }
    
    永远不会被锻炼

    我认为您的代码可以简化为:

    for (int i = 0; i < 3; i++){
    
        if (w[random][i] == u){
            dis[i] = u;
        }
        else {
            dis[i] = '_';
        }
    }
    
    for(int i=0;i<3;i++){
    如果(w[随机][i]==u){
    dis[i]=u;
    }
    否则{
    dis[i]='u';
    }
    }
    
    随机字符的显示是由以下原因引起的:

  • dis
    未初始化

  • dis[i]
    for
    循环中的两个子句中未设置为

  • for
    循环中

    for (int i = 0; i < 3; i++){
    
        if (w[random][i] == u){
            dis[i] = u;
        }
        else if (w[random][i] == '_'){
            // Missing code to set dis[i]
            continue;
        }
        else if (w[random][i] != u && w[random][i] != '_'){
            // Missing code to set dis[i]
            continue;
        }
        else {
            dis[i] = '_';
        }
    }
    
    这个条件永远不会是真的。测试用例中没有一个单词包含

    根据您的数据,在

        if (w[random][i] == u){
    

    将是真的。这意味着,最后一条

        else {
            dis[i] = '_';
        }
    
    永远不会被锻炼

    我想你的密码