%5c导致C语言输出异常的问题

问题描述 投票:0回答:1
#include <stdio.h>

int main() {
    int y = 0, w = 0;
    scanf("%d %5c", &y, &w);
    printf("%d,%c\n", y, w);
    return 0;
}

当我输入

2000 12345
时,输出是
1845,1

当我输入

1000 12345
时,输出是
821,1

当我输入

2000 23456
时,输出是
1846, 2

但是如果我将

%5c
更改为
%4c
,则输入
2000 12345
对应于输出
2000,1

为什么?这些

1845
1846
821
从哪里来?

我认为问题出现在

%5c

c
1个回答
0
投票

您的代码的问题在于 scanf 函数。格式说明符

%5c
用于读取正好 5 个字符,但您尝试将它们存储在单个 int 变量 w 中。这将导致未定义的行为。

这是代码的更正版本:

#include <stdio.h>

int main() {
    int y = 0;
    char w[6]; // Array to store 5 characters + null terminator
    scanf("%d %5s", &y, w); // Use %5s to read up to 5 characters into a string
    printf("%d,%s\n", y, w); // Use %s to print the string
    return 0;
}

在此版本中,w 被声明为字符数组,最多可存储 5 个字符加上一个空终止符。格式说明符

%5s
用于读取最多 5 个字符到字符串 w 中,%s 用于打印字符串。

或者,当您真正需要

int
时。

#include <stdio.h>

int main() {
    int y = 0, w=0;
    scanf("%d %d", &y, w); 
    printf("%d,%d\n", y, w); 
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.