鱼C论坛

 找回密码
 立即注册
查看: 2368|回复: 9

[已解决]奇怪的输出

[复制链接]
发表于 2022-10-20 12:18:39 | 显示全部楼层 |阅读模式
60鱼币
本帖最后由 超神奇葩天才 于 2022-10-20 12:21 编辑

#include<stdio.h>
main()
{
        int x1,x2;
        char y1,y2;
        scanf("%2d%3d%3c%c",&x1,&x2,&y1,&y2);
        printf("x1 = %d,x2 = %d,y1 = %c,y2 = %c\n",x1,x2,y1,y2);
}

输入:
9876543210
输出:
x1 = 98,x2 = 12851,y1 = 4,y2 = 1

x2为啥输出12851?
最佳答案
2022-10-20 12:18:40
本帖最后由 jackz007 于 2022-10-20 13:01 编辑

        错在 "%3c" ,字符输入不可指定域宽,写成 "%*c%*c%c" 就对了
#include<stdio.h>

main(void)
{
        int x1 , x2                                                   ;
        char y1 , y2                                                  ;
        scanf("%2d%3d%*c%*c%c%c" , &x1,&x2,&y1,&y2)                   ;
        printf("x1 = %d , x2 = %d , y1 = %c , y2 = %c\n",x1,x2,y1,y2) ;
}
        编译、运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
987654321
x1 = 98 , x2 = 765 , y1 = 2 , y2 = 1

D:\[00.Exerciese.2022]\C>

最佳答案

查看完整内容

错在 "%3c" ,字符输入不可指定域宽,写成 "%*c%*c%c" 就对了 编译、运行实况:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-20 12:18:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-10-20 13:01 编辑

        错在 "%3c" ,字符输入不可指定域宽,写成 "%*c%*c%c" 就对了
#include<stdio.h>

main(void)
{
        int x1 , x2                                                   ;
        char y1 , y2                                                  ;
        scanf("%2d%3d%*c%*c%c%c" , &x1,&x2,&y1,&y2)                   ;
        printf("x1 = %d , x2 = %d , y1 = %c , y2 = %c\n",x1,x2,y1,y2) ;
}
        编译、运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
987654321
x1 = 98 , x2 = 765 , y1 = 2 , y2 = 1

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-20 12:22:14 | 显示全部楼层
谁教给你scanf这么用的?
scanf可以指定宽度?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-20 12:46:51 | 显示全部楼层
人造人 发表于 2022-10-20 12:22
谁教给你scanf这么用的?
scanf可以指定宽度?

https://blog.csdn.net/weixin_345 ... 00136-null-null.142^v59^new_blog_pos_by_title,201^v3^add_ask&utm_term=scanf%E5%8F%AF%E4%BB%A5%E6%8C%87%E5%AE%9A%E5%AE%BD%E5%BA%A6%EF%BC%9F&spm=1018.2226.3001.4187
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-20 12:51:45 | 显示全部楼层
人造人 发表于 2022-10-20 12:22
谁教给你scanf这么用的?
scanf可以指定宽度?

scanf可以指定宽度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-20 12:54:20 | 显示全部楼层

谁告诉你的?
哪个教程这么教的?
把那个教程撕了,换一个好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-20 13:03:17 | 显示全部楼层
https://cplusplus.com/reference/cstdio/scanf/
https://www.apiref.com/cpp/cpp/io/c/scanf.html

我记得scanf不可以指定宽度的
但是scanf确实可以指定宽度
我只找到了 %s 和 %[ 的宽度说明
其他没有,不知道 %d的宽度意味着什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-20 13:13:33 | 显示全部楼层
好吧,scanf可以指定宽度,但是通常不会是你期望的结果
$ cat main.c
#include <stdio.h>

int main(void) {
    int x;
    scanf("%3d", &x);
    printf("%d\n", x);
    return 0;
}
$ ./main
12345
123
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-20 13:33:35 | 显示全部楼层
遇到sb个老师为了难到我们出个这种题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-20 13:54:25 | 显示全部楼层
超神奇葩天才 发表于 2022-10-20 13:33
遇到sb个老师为了难到我们出个这种题

       你应该感谢你的老师,他让你有机会对 scanf() 有了一个兜底的了解,从此以后,但凡遇到 scanf() 的问题,你会比别人有数得多!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 10:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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