鱼C论坛

 找回密码
 立即注册
查看: 2745|回复: 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" 就对了
  1. #include<stdio.h>

  2. main(void)
  3. {
  4.         int x1 , x2                                                   ;
  5.         char y1 , y2                                                  ;
  6.         scanf("%2d%3d%*c%*c%c%c" , &x1,&x2,&y1,&y2)                   ;
  7.         printf("x1 = %d , x2 = %d , y1 = %c , y2 = %c\n",x1,x2,y1,y2) ;
  8. }
复制代码

        编译、运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

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

  5. D:\[00.Exerciese.2022]\C>
复制代码

最佳答案

查看完整内容

错在 "%3c" ,字符输入不可指定域宽,写成 "%*c%*c%c" 就对了 编译、运行实况:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

  2. main(void)
  3. {
  4.         int x1 , x2                                                   ;
  5.         char y1 , y2                                                  ;
  6.         scanf("%2d%3d%*c%*c%c%c" , &x1,&x2,&y1,&y2)                   ;
  7.         printf("x1 = %d , x2 = %d , y1 = %c , y2 = %c\n",x1,x2,y1,y2) ;
  8. }
复制代码

        编译、运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

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

  5. D:\[00.Exerciese.2022]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-10-20 12:22:14 | 显示全部楼层
谁教给你scanf这么用的?
scanf可以指定宽度?
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

scanf可以指定宽度
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

谁告诉你的?
哪个教程这么教的?
把那个教程撕了,换一个好的
小甲鱼最新课程 -> https://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的宽度意味着什么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  3. int main(void) {
  4.     int x;
  5.     scanf("%3d", &x);
  6.     printf("%d\n", x);
  7.     return 0;
  8. }
  9. $ ./main
  10. 12345
  11. 123
  12. $
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-20 13:33:35 | 显示全部楼层
遇到sb个老师为了难到我们出个这种题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

       你应该感谢你的老师,他让你有机会对 scanf() 有了一个兜底的了解,从此以后,但凡遇到 scanf() 的问题,你会比别人有数得多!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-23 06:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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