当我们使用%d扫描字符时会发生什么?

炽鹰

我运行了这段代码

#include <stdio.h>
int main()
{
    int u;
    scanf("%d",&u);
    printf("%d\n",u,u);
    return 0;   
}

以下是输入和输出:

input:a output:32765
input:b output:32765
input:c output:32767
input:/ output:32766

谁能解释这种行为?

chqrlie

scanf()读取输入时,它无法根据规范进行转换,它将停止扫描并返回成功转换的次数。在您的情况下,字符保留在标准输入缓冲区中并scanf()返回0

您的代码具有未定义的行为,因为scanf()无法将输入转换为整数,而未u初始化。将此未初始化的值传递给printf具有未定义的行为。在您的情况下,会打印一些随机值,该值可能不同也可能不同,但是任何其他行为(包括崩溃)都是可能的。

您必须测试的返回值scanf()以检查转换是否成功。这是修改后的版本:

#include <stdio.h>

int main(void) {
    int u, res;
    res = scanf("%d", &u);
    if (res == 1) {
        /* conversion succeeded */
        printf("%d\n", u);
    } else
    if (res == 0) {
        /* conversion failed */
        printf("input is not a valid number\n");
    } else {
        /* res must be EOF */
        printf("premature end of file: no input given\n");
    }
    return 0;   
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我们在Collections.synchronizedMap()中传递哈希表时会发生什么

当我们在C#中访问字符串的'Length'属性时会发生什么?

当我们在C ++中更改字符串的值时会发生什么

当我们使用json键作为JS代码时会发生什么情况?

当我们不等待异步方法时会发生什么

当我们修改现有Office加载项的清单时会发生什么?

当我们在Python的类中给出函数定义时会发生什么

当我们在方法内部创建锁(同步块)对象时会发生什么?

当我们通过该函数传递值结果时会发生什么?

itemgetter如何工作?当我们将其初始化为密钥时会发生什么

当我们调用puppeteer waitForSelector API时会发生什么

当我们git checkout一个提交时会发生什么

当我们上课时会发生什么?

当我们停止并启动ec2实例AWS时会发生什么

当我们尝试设置当前执行代码的寄存器时会发生什么?

当我们单击SSMS的“新查询”按钮时会发生什么?

当我们运行julia-lang脚本时会发生什么?

当我们向GPIO写入0时会发生什么

当我们将参数传递给System.out.println()时会发生什么?

当我们将jar提交给风暴集群时会发生什么情况?

当我们尝试修改字符串常量时会发生什么?

当我们重新加载Elixir模块时会发生什么?

当我们将char转换为大于256的数字时会发生什么?

当我们在html标记中包含错误的属性时会发生什么?

当我们在同一类中创建类的实例时会发生什么?

当我们改变循环中的值时会发生什么?

当我们有多个 Java 线程时,运行时会发生什么?

当我们在 C 中使用字符而不是整数来定义数组时会发生什么?

当我们在 C++ 中使用“while”时会发生什么转换?