鱼C论坛

 找回密码
 立即注册
查看: 1272|回复: 4

[已解决]关于scanf 使用上的问题

[复制链接]
发表于 2023-11-4 00:25:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问,为什么在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;
}
最佳答案
2023-11-4 00:25:52
scanf 的格式字符串中,使用空格或换行符来分隔输入的数据。它们都会被视为分隔符,并告诉 scanf 继续读取下一个输入项。

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

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-4 00:25:52 | 显示全部楼层    本楼为最佳答案   
scanf 的格式字符串中,使用空格或换行符来分隔输入的数据。它们都会被视为分隔符,并告诉 scanf 继续读取下一个输入项。

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

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

明白了,感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-6 18:51:18 | 显示全部楼层
isdkz 发表于 2023-11-4 00:26
问题出在 scanf 函数的格式字符串中的 "\n"。scanf 函数的格式字符串用于指定输入的格式,其中的空格、制表 ...

懂了懂了谢谢大佬!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 23:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表