在C语言中如何使用scanf获取int?

2023-12-02

我正在尝试了解从控制台获取输入的不同方法的优点和缺点。我很困惑scanf。为什么我需要使用use&favNumber代替favNumber?

我明白那个&favNumber是地址位置favNumber,但是为什么要这样做呢?

我觉得这里有一个类型不匹配的地方favNumber是一个 int 我告诉scanf它是一个指向 int 的指针。我以为我把注意力集中在指针上,但这让我有点困惑。任何帮助,将不胜感激。谢谢!

#include <stdio.h>

int main()
{
    char userPrompt[100] = "What is your favorite number?";
    int favNumber;

    printf("%s", userPrompt);
    scanf("%d", &favNumber);
    printf("%d", favNumber);

    return 0;
}

当您按值调用函数时,该函数会获取参数的副本。对函数中参数的任何更改都不会影响原始变量的值。

void foo(int i )
{
   i = 20; // The change is local to the function.
}

void bar()
{
   int i = 10;
   foo(i); 
   printf("i=%d\n", i);  // i is still 10.
}

如果希望函数改变变量的值,函数必须使用指针类型,并且调用函数在调用函数时必须使用变量的地址。

void foo(int* i )
{
   *i = 20; // The change is visible in the calling function
}

void bar()
{
   int i = 10;
   foo(&i); 
   printf("i=%d\n", i);  // i is now 20.
}

这就是为什么scanf需要指针,并且调用函数在调用时必须使用变量的地址scanf. scanf必须能够设置变量的值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在C语言中如何使用scanf获取int? 的相关文章

  • 数字或货币的字符串格式?

    我需要为每个千给出逗号 所以我用了DataFormatString 0 它运行良好 但当值为0 它正在显示 00 我只想只显示 0 我们怎样才能做到这一点 DataFormatString 0 C0 这将格式化为小数点后 0 位的货币 Da
  • 获取枚举实例的名称[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 假设我有这个枚举 public enum MyEnum ValueOne 1 ValueTwo 2 ValueThree 3 然后
  • 任何reinterpret_cast改变指针值的真实例子?

    根据 C 标准 reinterpret cast一个指针的T 到其他类型的指针Q 可以改变或不改变指针值 https stackoverflow com questions 1863069 casting via void instead
  • Swashbuckle 在 ASP.NET Core 中失败并出现 NotSupportedException 异常

    我跟着这个关于如何在我的 asp net core 2 2 项目中添加 swashbuckle 当我运行该项目时 我收到以下错误 处理请求时发生未处理的异常 NotSupportedException HTTP 方法 GET 和路径 id
  • 尽管 if 语句,Visual Studio 仍尝试包含 Linux 标头

    我正在尝试创建一个强大的头文件 无需更改即可在 Windows 和 Linux 上进行编译 为此 我的包含内容中有一个 if 语句 如下所示 if defined WINDOWS include
  • pybind11 返回 numpy 对象数组

    使用 pybind11 C API 和 python3 我们如何在 C 实现中正确创建一个 numpy 对象数组 即 unicode 字符串 并将其返回给 python 传递到 pybind11 array 的底层数据数组的确切内存布局是什
  • MPI_Gather 分段错误

    我有这个并行高斯消除代码 调用以下任一方法时会发生分段错误MPI Gather函数调用 我知道如果没有为任一缓冲区正确分配内存 可能会出现此类错误 但我看不出内存管理代码有什么问题 有人可以帮忙吗 Thanks Notes 该程序从一个 t
  • 是否可以将 CMFCToolBar 添加到对话框中?

    我刚刚尝试了将 CToolbar 添加到新 CMFCToolBar 上的对话框的标准方法 但这不起作用 在我深入研究新的实现之前 我想知道它是否真的可行 我不确定你所说的 标准方式 是什么意思 但你当然可以以编程方式做到这一点 In MyD
  • Web API 2 中的方法名称约定 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否有 Web API 2 中使用的约定的列表 以这两种方法为例 两者都可以工作 但都没有用属性来装饰 IHttpActionResu
  • 如何防止打印屏幕

    我有一个要求 我正在开发的应用程序阻止用户轻松捕获屏幕内容 我已经表示 没有可行的方法可以完全防止这种情况发生 但我正在寻找方法来为这一过程引入一些障碍 我正在使用 C NET 2 0 和 WinForms 你不能 您能做的最好的事情就是在
  • 在 C99 中,f()+g() 是未定义还是只是未指定?

    我曾经认为在C99中 即使函数的副作用f and g干扰 虽然表达f g 不包含序列点 f and g将包含一些 因此行为将是未指定的 要么 f 在 g 之前调用 要么 g 在 f 之前调用 我不再那么确定了 如果编译器内联函数会怎样 即使
  • try-catch 块是否会降低性能[重复]

    这个问题在这里已经有答案了 This link http www cplusplus com doc tutorial exceptions states 为了捕获异常 我们必须将一部分代码放在异常下 检查 这是通过将这部分代码包含在 tr
  • if(pointerVar) 与 if(pointerVar!=NULL) 相同吗?

    简单的问题 Is if pointerVar 与if pointerVar NULL 也是if pointerVar 与if pointerVar NULL 给我你在技术上最正确 迂腐的答案 这两种说法看起来和操作起来都是一样的 前者有什么
  • 寻找自定义 SynchronizationContext 的示例(单元测试所需)

    我需要定制同步上下文 http msdn microsoft com en us library system threading synchronizationcontext aspx that 拥有一个运行 Posts 和 Sends
  • 无法在 Visual Studio Code 的 C# 输出上键入任何内容

    所以我试图在 vscode 上运行一个非常基本的 C 程序 代码如下 using System namespace HelloWorld class Program static void Main string args string N
  • timeval_subtract 解释

    使用 timeval subtract 函数来查找两个 struct timeval 类型之间经过的时间 有人可以解释一下用于 通过更新 y 执行后续减法的进位 和其他部分的目的和逐步数学吗 我了解该函数的目的以及如何在程序中实现它 但我想
  • Windows 中的蓝牙 AVRCP 命令会触发哪些事件

    可以这么说 只是在做一些高级侦察 对于我的潘多拉客户 Elpis http elpis adamhaile net 我支持全局媒体键 键盘上的 MediaPlayPause MediaNext 等 并且我希望能够支持AVRCP http e
  • 并排显示图像的一半 - OpenGL

    我为两个图像创建了两个纹理 现在我想在opengl中按图像2的左侧部分 完整的图像1 图像2的右侧部分的顺序显示该纹理 我已经做了如下 Image1 显示在 opengl 屏幕的中央 但屏幕的左右部分不正确 应分别显示 image2 的左侧
  • 隐藏 MediaPlayer 控件(Microsoft 媒体平台播放器框架)

    我在 c xaml 应用程序中使用 MMP PF 提供我自己的控制元素来处理播放器 这就是为什么我想隐藏 禁用出现在底部的本机控件 在屏幕截图的屏幕中间 这只是使用了一个主题 有人知道该怎么做吗 我没能找到合适的房产 像这样使用 axWin
  • 如何让浏览器后退按钮通过 AJAX 调用带您返回?

    我有一个页面 上面有很多动态生成的复选框 当用户单击这些复选框时 页面上的许多内容会通过 ajax 动态更改 最终用户抱怨 在点击提交然后点击后退按钮更改某些内容后 他们的选择被破坏了 他们必须重新做一遍 我见过一些网站 gmail fac

随机推荐

  • 这个哈希对于安全性有优势吗?

    有什么好处吗 sha1 sha1 sha1 password salt 基本上有多个 sha1 与只有一个 sha1 sha1 password salt 我再说一遍 不要DO NOT尝试通过对哈希值进行 特殊 操作来使密码哈希值更安全 F
  • 使用 auto 访问类的私有结构

    我发现下一个奇怪的代码编译并运行 在 VS 2019 上 include
  • 什么是条件同步?

    有人可以向我解释条件同步吗 一个例子 最好是 C 的 也将不胜感激 听起来你的教授正在谈论线程 线程使计算机程序能够一次执行多件事情 在线程已经运行的情况下启动新线程的行为被计算机程序员称为 启动线程 线程可以共享相同的内存空间 条件同步
  • 0xC0000005:读取位置 0x00000008 时发生访问冲突

    我已经为此苦苦挣扎了一段时间 想知道是否有人可以提供帮助 我正在尝试使用 C 和 SDL1 3 制作粒子样本 到目前为止我已经取得了巨大的成功 程序编译并打开屏幕 但没有任何反应 当我运行调试器时 我收到此错误 SDL 1 3 Space
  • 为每个用户选择每天最高的 3 个分数

    我有一个像这样的 MYSQL 表 id userid score datestamp 1 1 5 2012 12 06 03 55 16 2 2 0 5 2012 12 06 04 25 21 3 1 7 2012 12 06 04 35
  • Windows 堆栈和堆地址范围

    到目前为止 我在使用 Linux 时 堆栈地址非常高 而堆地址非常低 通过使用 C 程序打印堆和堆栈地址可以看出 我对 Win32 进程内存布局有一个问题 MWSDN说堆栈地址高于堆地址 但从我在实践中看到的情况来看 堆栈地址低于堆地址 所
  • 关闭 MySQL 连接 (PHP)

    我编写了一个类来创建与 MySQL 的自动连接并创建查询 它看起来是这样的 include constants php class MySQLDB var connection function construct this gt conn
  • openpty 之后的 ncurses newterm

    我正在尝试弄清楚如何执行以下操作 创建一个新的伪终端 打开在 从属 伪终端内运行的 ncurses 屏幕 fork A 将 I O 从程序运行的终端 bash 转发到新的 从属 终端或 B 退出 让 ncurses 程序在新 pty 中运行
  • 从 R 中未知密度的分位数生成随机样本[重复]

    这个问题在这里已经有答案了 如何从未知密度的分位数生成随机样本数据f x for x之间0 and 4 in R f function x x 1 2 exp x 3 3 2 x 2 2 x 如果我理解正确的话 你想生成具有密度函数由下式给
  • 后缀(前缀)增量、L 值和 R 值(在 C 和 C++ 中)

    我刚刚了解到以下事实 前缀增量 var name 的结果是 C 中的 R 值 至少 我是 确保它不是 C 中的 L 值 但它是 C 中的 L 值 后缀增量 var name 的结果是 C 中的 R 值 至少 我是 确保它不是 C 中的 L
  • 提升语义操作导致解析问题

    我一直在使用 Boost mini 编译器示例 这是源代码的根 http www boost org doc libs 1 59 0 libs spirit example qi compiler tutorial mini c 我感兴趣的
  • 向结构化numpy数组添加字段(3)

    这个问题已经被问过并回答过多次 here and here 例如 显然该函数已在 numpy 1 6 1 中移动 没有更多了numpy lib recfunctions 虽然我可以按照之前的帖子中指定的方式实现我自己的 但我会really而
  • 如何在连接字段中使用逗号分隔列表连接两个表

    我有两张桌子 categories and movies In movies表我有一列categories 该列包含电影所属的类别 类别是用逗号分隔的 ID 这是一个例子 Table categories id name 1 Action
  • Spark 无法找到 JDBC 驱动程序

    因此 我一直在使用 sbt 和 assembly 将所有依赖项打包到一个 jar 中以用于我的 Spark 作业 我有几份工作正在使用c3p0设置连接池信息 将其广播出去 然后使用foreachPartition然后在 RDD 上获取连接
  • 如何在 DBX 中使用连接池?

    Well 我设法让代表驱动程序正确设置 但连接池仍然给我带来很多麻烦 从文档中给出的描述来看 连接池似乎应该像这样工作 在单个全局 Connection 对象上设置 DBXPool 驱动程序委托 将此 Connection 对象用于对数据库
  • 这似乎是一个关于 Javascript 事件的类。它是什么?

    我刚刚遇到了一些看起来像这样的 jQuery add row live click add function do something 这似乎与 点击 添加 事件 我自己使用自定义事件并认为它们很棒 但是git grep我们的代码库上没有显
  • 替换终端中的多行字符串

    我正在尝试编写一些代码来覆盖其之前的输出 例如原始输出是 1 但是 1 被替换为 2 这使得它看起来好像 1 一开始就没有被输出过 我有一个名为的列表列表board 我使用以下代码将此列表转换为多行字符串 rendered board fo
  • JavaScript:在选项卡之间共享数据[重复]

    这个问题在这里已经有答案了 在浏览器中打开的选项卡之间共享数据的最佳方式是什么 如需更现代的解决方案 请查看这个答案引述如下 我坚持使用问题中提到的共享本地数据解决方案localStorage 就可靠性 效率和浏览器兼容性而言 它似乎是最好
  • 为什么 '$_' 与 Perl 单行代码中的 $ARGV 相同?

    我在尝试在 Perl 单行代码中打印单引号时遇到了这个问题 我最终发现你必须逃离他们 这是一些代码来说明我的问题 让我们从打印文本文件开始 perl ne chomp print n shortlist txt red orange yel
  • 在C语言中如何使用scanf获取int?

    我正在尝试了解从控制台获取输入的不同方法的优点和缺点 我很困惑scanf 为什么我需要使用use favNumber代替favNumber 我明白那个 favNumber是地址位置favNumber 但是为什么要这样做呢 我觉得这里有一个类