c - 为什么不让我使用 scanf() 向字符输入值?

标签 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 键时,只需停止并退出执行。

我在两个示例之间有更多代码,但我尝试按照所示方式编写它们,但发生了同样的事情。

最佳答案

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

如果您想读取单个字符,您需要做的是使用格式说明符“%c”

关于c - 为什么不让我使用 scanf() 向字符输入值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54726345/

相关文章:

c - 数组越界检查(带函数)

c - 为什么这没有生成所有可能的子集?

c - 将整数文字添加或分配给 size_t

c - 用 C 将结构写入文件的可移植方法是什么?

c - printf() 中 %S(大写 s)的用途是什么?

CodeBlocks exe 停止工作

c++ - 导入库如何工作?详情?

c - 如何使用自定义版本的 glibc 和静态链接构建 C 程序?

c - OpenGL 渲染上下文产生 "opcode of failed request 152 (GLX)"(Mesa 8.0 - OpenGL 3.0,Linux)

c - 使用 fork() 执行 if/else if/else