纪叶 发表于 2023-11-4 00:25:04

关于scanf 使用上的问题

请问,为什么在scanf里面有\n,运行了输入数据后,换行了也没有输出我的值,需要打一个数字在换行才输出值?
把scanf里面的\n删掉就没有这个问题了,但这是为什么呢?)

代码如下:

#include<stdio.h>
#include<math.h>
int main()
{
        double r,h;
        double pi = 3.14; //圆周率取3.14
        printf("请输入半径和高 :\n");
        scanf("%lf %lf\n",&r,&h);
        printf("圆周长=%.2f\n",2.00*pi*r);
        printf("圆面积=%.2f\n",pi*r*r);
        printf("圆球表面积=%.2f\n",4.00*pi*r*r);
        printf("圆球体积=%.2f\n",4.00/3.00*pi*r*r*r);
        printf("V圆柱体积=%.2f\n",pi*r*r*h);
        return 0;
}

Mike_python小 发表于 2023-11-4 00:25:52

在 scanf 的格式字符串中,使用空格或换行符来分隔输入的数据。它们都会被视为分隔符,并告诉 scanf 继续读取下一个输入项。

当您将换行符 \n 放在 scanf 格式字符串中时,它会读取并忽略任何连续的空白字符,包括空格、制表符和换行符,直到找到下一个非空白字符。所以在输入数据时,您需要输入一个非空白字符(如数字),以便 scanf 能够继续读取输入并将其分配给变量。

如果您删除 scanf 格式字符串中的换行符 \n,则 scanf 将不会跳过任何空白字符,而是直接读取输入并将其分配给变量。这可能会更容易理解和使用,因为您可以直接输入数据并按 Enter 键结束输入,而不需要再次输入数字以便 scanf 能够继续读取输入。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-11-4 00:26:00

问题出在 scanf 函数的格式字符串中的 "\n"。scanf 函数的格式字符串用于指定输入的格式,其中的空格、制表符和换行符都会被用来跳过输入中的空白字符。所以当你输入数据后按下回车键时,scanf 函数会读取并丢弃掉这个换行符,然后继续等待下一个非空白字符的输入。

在你的代码中,当 scanf 函数的格式字符串为 "%lf %lf\n" 时,它会先读取两个 double 类型的值,然后跳过一个换行符。所以当你输入完两个数后按下回车键,scanf 函数会读取并丢弃掉这个换行符,然后继续等待下一个非空白字符的输入。因此,你需要再输入一个数字并按下回车键,才能让程序继续执行并输出结果。

解决这个问题的方法是将 scanf 函数的格式字符串改为 "%lf %lf",即去掉末尾的换行符。这样,scanf 函数会读取两个 double 类型的值,并且不会跳过任何换行符。这样你就可以直接输入两个数并按下回车键,程序就会继续执行并输出结果了。

修改后的代码如下:

#include<stdio.h>
#include<math.h>
int main()
{
    double r,h;
    double pi = 3.14; //圆周率取3.14
    printf("请输入半径和高 :\n");
    scanf("%lf %lf",&r,&h);
    printf("圆周长=%.2f\n",2.00*pi*r);
    printf("圆面积=%.2f\n",pi*r*r);
    printf("圆球表面积=%.2f\n",4.00*pi*r*r);
    printf("圆球体积=%.2f\n",4.00/3.00*pi*r*r*r);
    printf("V圆柱体积=%.2f\n",pi*r*r*h);
    return 0;
}

纪叶 发表于 2023-11-6 18:50:39

Mike_python小 发表于 2023-11-4 00:25
在 scanf 的格式字符串中,使用空格或换行符来分隔输入的数据。它们都会被视为分隔符,并告诉 scanf 继续读 ...

明白了,感谢大佬

纪叶 发表于 2023-11-6 18:51:18

isdkz 发表于 2023-11-4 00:26
问题出在 scanf 函数的格式字符串中的 "\n"。scanf 函数的格式字符串用于指定输入的格式,其中的空格、制表 ...

懂了懂了谢谢大佬!
页: [1]
查看完整版本: 关于scanf 使用上的问题