阅读一个字符并在C上进行操作

时间:2013-04-13 23:31:11

标签: c while-loop

好的,所以我试着学习一些C.我正在尝试编写一个程序,它将有一个数字并让用户提出一个数字。

我猜完所有事后都会接受用户询问用户是否想再玩一次。如果他们输入Y或y,则游戏将重新开始,如果他们输入“N”或“n”,则程序将终止。

我想做什么

int   main(){

 while(playAgain == 'y' || 'Y') {

*playing code here*



printf("would you like to play again");
scanf("%s", &playAgain);


 }

它根本没有破坏......永远,无论我输入什么。我做错了什么?

3 个答案:

答案 0 :(得分:3)

这里的问题(除了评论中的内容)是你的条件语义。您希望playAgain == 'y' || 'Y'被解释为playAgain equals 'y' or playAgain equals 'Y'

相反,它被解析为(playAgain equals 'y') or ('Y')。由于true定义为非零,'Y'非零(ASCII值为131),'Y'始终为true,并且条件始终为true。你想要:

while (playAgain == 'y' || playAgain == 'Y')

答案 1 :(得分:2)

我猜这里的类型是playAgain是char?

您没有正确使用scanf。 http://www.cplusplus.com/reference/cstdio/scanf/

使用%s的scanf期望读取字符串。在C中,字符串是char *,因此它将使用指针值写入playAgain,丢弃顶部位。这几乎是一个随机值,比较将失败。如果你想把playAgain作为一个角色,你应该使用%c。

顺便说一句,它不是美元。

或者,您可以将playAgain实现为字符串。在这种情况下,你可以这样做:

int   main(){
    char playAgain[buffer_size];
    do{
        /*playing code here*/
        printf("would you like to play again");
        scanf("$s", &playAgain);
        lower_case_string( playAgain); // Call a function for changing string to lower case
    }while( !strcmp( "yes", playAgain) || !strcmp( "y", playAgain );
}

答案 2 :(得分:1)

您必须修复代码中的一些内容:

char playAgain = 'y';
while(playAgain == 'y' || playAgain == 'Y') // *1
{

    //*playing code here*

    printf("would you like to play again? ");
    scanf("%s", &playAgain); //*2
}

* 1您必须将每个条件分为AND或OR(&&或||)。

* 2使用scanf参数的正确格式是使用“%”,而不是“$”。在此处查看更多使用信息:http://www.cplusplus.com/reference/cstdio/scanf/

在你的代码修复之后,循环同时将重复用户输入任何以'y'或'Y'开头的单词,例如'Yellow'将在此代码中重启循环。如果要控制引入的完整字符串,则必须使用char数组或字符串,并将其与辅助函数进行比较,如下所示:

bool compareArrays(char* str1, char* str2, int lenght)
{
    int i;
    for (i=0; i<lenght; ++i)
        if (str1[i] != str2[i]) return false;
    return true;
}