为什么不让我通过scanf()向char输入值?

时间:2019-02-16 18:33:47

标签: c

为什么这不能让我在函数内部的变量中输入字符。我在另一个函数中有完全相同的东西,而那个函数没有问题。

这是可行的

char anotherOne='s';
while(anotherOne=='s'){
    printf("\nWould you like to continue?");
    scanf("%s", &anotherOne);
}

然后我在另一个功能中使用了这个功能,该功能不起作用

char op='s';
while(op=='s'){
    printf("next(s) o prev(a)?");
    scanf("%s", &op);
}

在第二个中,当我写一个字符并按Enter时,只需停止并退出执行即可。

两个示例之间都有更多代码,但我尝试如图所示编写它们,并且发生了相同的事情。

1 个答案:

答案 0 :(得分:2)

格式说明符"%s"需要一个指向字符数组的指针,而不是单个char的地址-但是由于数组在传递给函数时会衰减为指针,因此scanf不会不知道它们之间的区别,并尝试将整个字符串写入&anotherOne,这是未定义的行为,因为您不知道进程中的内容是什么,否则系统的内存将被覆盖。

如果要读取单个字符,则需要使用格式说明符"%c"