指向C中数组元素的指针

指向C中数组元素的指针,c,arrays,pointers,C,Arrays,Pointers,我正在尝试创建一个程序,每当用户输入“roll”时,该程序都会打印一个随机数,如果随机数大于或等于3,则允许用户输入“1” #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> int main(void) { int randomnumber; char diceinput; int slotnumber; cha

我正在尝试创建一个程序,每当用户输入“roll”时,该程序都会打印一个随机数,如果随机数大于或等于3,则允许用户输入“1”

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

int main(void)
{
    int randomnumber;
    char diceinput;
    int slotnumber;
    char lettertable[7];
    char *character;

    lettertable[1] = 'l';
    lettertable[2] = 'r';
    lettertable[3] = 't';
    lettertable[4] = 'e';
    lettertable[5] = 't';
    lettertable[6] = 'e';

    character = &lettertable[1];

    printf("Enter 'roll' to roll the dice. Enter 'exit' to quit.\n");

    scanf("%s", &diceinput);

    if (strcmp(&diceinput, "exit")==0) {        
        printf("Now quitting. Thank you, and please play again!\n");        
    }

    if (strcmp(&diceinput, "roll")==0) {        
        srand((unsigned)time(NULL));
        randomnumber = rand() % 6 + 1;
        printf("%d\n", randomnumber);

        if (randomnumber >= 3) {            
            printf("Enter 1 to get the corresponding letter from table.\n");
            scanf("%d", &slotnumber);

            if (slotnumber == 1) {                
                printf("%s", character);                
            }
        }
    }
 }
#包括
#包括
#包括
#包括
内部主(空)
{
整数随机数;
字符输入;
int slotnumber;
字符表[7];
字符*字符;
字母表[1]=“l”;
字母表[2]=“r”;
字母表[3]=“t”;
字母表[4]=“e”;
字母表[5]=“t”;
字母表[6]=“e”;
字符=&字母表[1];
printf(“输入'roll'掷骰子。输入'exit'退出。\n”);
scanf(“%s”,输入(&D);
如果(strcmp(&diceinput,“exit”)==0{
printf(“现在退出。谢谢,请再次播放!\n”);
}
如果(strcmp(&diceinput,“roll”)==0{
srand((无符号)时间(NULL));
randomnumber=rand()%6+1;
printf(“%d\n”,随机数);
如果(随机数>=3){
printf(“输入1从表中获取相应的字母。\n”);
scanf(“%d”和slotnumber);
如果(slotnumber==1){
printf(“%s”,字符);
}
}
}
}
用户输入“1”后,程序应获取存储在字母表[1]中的字母,字母表是数组字母表中的一个元素。然而,当我运行程序并输入“1”时,输出的不是字母“l”,而是一个奇怪的短语:“lrtite”,带有一个倒置的问号。谁能帮帮我吗?多谢各位

请注意,上面显示的代码只是未完成程序的相关部分

试试这个

if (slotnumber == 1) 
{
        printf("%c", *character);
}
正如您的代码所指出的,如果(strcmp(&diceinput,“exit”)==0),则不会退出。你应该习惯于戒烟

 if (strcmp(&diceinput, "exit")==0) 
 {
      printf("Now quitting. Thank you, and please play again!\n");
      exit(0);
 }
试试这个

if (slotnumber == 1) 
{
        printf("%c", *character);
}
正如您的代码所指出的,如果(strcmp(&diceinput,“exit”)==0),则不会退出。你应该习惯于戒烟

 if (strcmp(&diceinput, "exit")==0) 
 {
      printf("Now quitting. Thank you, and please play again!\n");
      exit(0);
 }

printf函数将打印在提供的位置找到的内容,并在找到二进制零时停止打印。你的问题是:

printf("%s", character);

由于数组的第二个元素不是零,它将一直打印,直到找到零为止。在您的情况下,您很幸运,它在打印大量垃圾之前找到了一个。

printf函数将打印在提供的位置找到的内容,并在找到二进制零时停止打印。你的问题是:

printf("%s", character);

由于数组的第二个元素不是零,它将一直打印,直到找到零为止。在您的情况下,您很幸运,它在打印大量垃圾之前找到了一个。

使用
%c
printf(“%c”,*字符)
而不是
printf中的
%s
(“%s”,字符)

您的代码中有一些逻辑错误:

1)
char输入然后
scanf(“%s”,输入(&D),这是一个很大的错误,您的程序可能会崩溃,因为您没有为输入字符串分配足够的内存(无论是静态还是动态)。使用
字符输入[5]
scanf(“%s”,输入)

2) 您已从
1
开始编制索引。(如果是故意的,请原谅)


3) 您正在使用
printf(“%s”,字符)
,我会说这是你的运气,你得到了
“lrtee”
作为输出,也就是说,它可能不会在
.te
处停止并在后面打印一些垃圾字符,因为在字符数组的末尾没有显式的
\0
字符。

使用
%c
printf中所示(“%c”,*character)
而不是
printf中的
%s
(“%s”,字符)

您的代码中有一些逻辑错误:

1)
char输入然后
scanf(“%s”,输入(&D),这是一个很大的错误,您的程序可能会崩溃,因为您没有为输入字符串分配足够的内存(无论是静态还是动态)。使用
字符输入[5]
scanf(“%s”,输入)

2) 您已从
1
开始编制索引。(如果是故意的,请原谅)


3) 您正在使用
printf(“%s”,字符)
,我会说你很幸运,你得到了
“lrtee”
作为输出,也就是说,它可能不会在
.te
处停止并在后面打印一些垃圾字符,因为字符数组末尾没有显式的
\0
字符。

如果你试图输出一个字母,请尝试替换
printf(“%s”,字符)
使用
printf(“%c”,*字符)

如果您试图输出一个字母,请尝试将
printf(“%s”,字符)
替换为
printf(“%c”,*字符)

diceInput是一个字符,但需要是一个数组字符diceInput[80];不要将指针传递给scanf的diceinput,因为您不需要更改数组的位置——只要数组中的数据。请学习如何一致地缩进。它使代码更容易阅读和理解。在我看来,使用单空格缩进太小了。因此,通过将选项卡映射到显示中的4个空格,鼓励4个空格缩进;这是一个合理的平衡,在缩进足够清晰和不超过行长度之间。此外,您打印“现在退出”,但您的代码不会退出。其中似乎没有循环。diceInput是一个char,但需要是一个数组char diceInput[80];不要将指针传递给scanf的diceinput,因为您不需要更改数组的位置——只要数组中的数据。请学习如何一致地缩进。它使代码更容易阅读和理解。在我看来,使用单空格缩进太小了。因此,通过将选项卡映射到显示中的4个空格,鼓励4个空格缩进;这是一个合理的平衡,在足够清晰的缩进和不超过行长度之间。同样,你打印“现在退出”,但是你的代码没有