为什么在C中的过程不适用于char

时间:2015-10-20 11:08:33

标签: c if-statement char

我在C中编写一个简单的测验(使用CodeBlocks 13.12)

它编译,但在第二个问题中不起作用。无论我输入什么,它总是给出答案'那是悲伤的'。 我无法理解有什么不对。 我来到这里,如果我评论第13行( scanf(“%d”,& age); ),那么它的第二个问题就开始了。 问题是什么?

#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <clocale>


int main()
{

int age;
char S1;

printf("How old is your dog? \n");
scanf("%d", &age);

if (age <= 7)
    {
        printf(" very young. the end \n");
        return 0;
    }
else
    {
        printf("old dog. \n \n");
    }

//question2

printf("Do you like dogs? y/n \n");
scanf("%c%c", &S1);

if (S1 == 'y')
    {
         printf("hey, that's nice \n");
    }
else
    {
        printf(" that's sad :( . \n");
        return 0;
    }
 return 0;
}

3 个答案:

答案 0 :(得分:4)

您通过

导致未定义的行为
scanf("%c%c", &S1);

scanf读取两个 char,其中一个存储在S1中,一个存储在堆栈的某个位置,因为scanf需要< 第二次 char*

如果您打算忽略实际角色后面的换行符,请写

scanf("%c%*c", &S1);

答案 1 :(得分:2)

将第二个scanf()更改为

scanf(" %c", &S1);

这将在输入缓冲区中转义左侧的换行符\n

另外,你正在阅读一个char。所以你只需要一个%c

答案 2 :(得分:0)

scanf("%c", &S1);

是输入一个字符的正确方法,