gpt4 book ai didi

c 程序不工作 scanf char

转载 作者:太空宇宙 更新时间:2023-11-04 06:23:55 25 4
gpt4 key购买 nike

#include <stdio.h>
int main() {

struct cerchio c1, c2;
float distanza;
char k;

//input del centro del primo cerchio
printf("Enter the coordinate x of the first circle's center: ");
scanf("%f", &c1.centro.x);
printf("Enter the coordinate y of the first circle's center: ");
scanf("%f", &c1.centro.y);

//input del raggio del cerchio
printf("Enter the circle's radius: ");
scanf("%f", &c1.raggio);

printf("The first circle's center is: (%.2f, %.2f)\n", c1.centro.x, c1.centro.y);


printf("Do you want to move this circle? y/n \n");
//Here is the problem <-------------
scanf("%s", &k);

if(k=='y'){
moveCircle(&c1);
printf("Now the circle's center is: (%.2f, %.2f)\n", c1.centro.x, c1.centro.y);
}
}

在注释下的 scanf 中//here 是如果我将 %c 放在程序结束时的问题。输入无效!如果我把 %s 程序完美运行。为什么?我已经声明了变量 k char!

最佳答案

scanf("%s", &k); 

应该是

scanf(" %c", &k); 

%c 是字符 (char) 的正确格式说明符,而 %s 用于字符串。 %c 后面的空格字符将跳过所有空白字符,包括无空白字符,直到出现 C11 标准中指定的第一个非空白字符:

7.21.6.2 The fscanf function

[...]

  1. A directive composed of white-space character(s) is executed by reading input up to the first non-white-space character (which remains unread), or until no more characters can be read. The directive never fails

当您使用 %c 时您的程序不等待进一步输入的原因是因为标准输入中有一个换行符 (\n)流(标准输入)。还记得在为每个 scanf 输入数据后按 enter 吗?换行符scanf%f 捕获。此字符由 scanf%c 捕获。这就是此 scanf 不等待进一步输入的原因。

至于为什么你的其他scanfs(with a %f)没有消耗\n是因为%f 跳过 C11 标准中的空白字符:

7.21.6.2 The fscanf function

[...]

  1. Input white-space characters (as specified by the isspace function) are skipped, unless the specification includes a [, c, or n specifier. 284

至于为什么你的程序在你用的时候能运行是因为你运气好。使用 %s 而不是 %c 调用 Undefined Behavior .这是因为 %s 匹配了一系列非空白字符并在末尾添加了一个 NUL 终止符。一旦用户输入任何内容,第一个字符将存储在 k 中,而其余字符(如果有)以及 \0 将写入无效的内存位置.

如果您目前正在思考为什么 %s 格式说明符没有使用 \n 是因为它跳过了空白字符。

关于c 程序不工作 scanf char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29557448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com