超神奇葩天才 发表于 2022-10-20 12:18:39

奇怪的输出

本帖最后由 超神奇葩天才 于 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?

jackz007 发表于 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:\\C>g++ -o x x.c

D:\\C>x
987654321
x1 = 98 , x2 = 765 , y1 = 2 , y2 = 1

D:\\C>

人造人 发表于 2022-10-20 12:22:14

谁教给你scanf这么用的?
scanf可以指定宽度?

超神奇葩天才 发表于 2022-10-20 12:46:51

人造人 发表于 2022-10-20 12:22
谁教给你scanf这么用的?
scanf可以指定宽度?

https://blog.csdn.net/weixin_34547317/article/details/117100136?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166624109416782248590791%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166624109416782248590791&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-117100136-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

超神奇葩天才 发表于 2022-10-20 12:51:45

人造人 发表于 2022-10-20 12:22
谁教给你scanf这么用的?
scanf可以指定宽度?

scanf可以指定宽度

人造人 发表于 2022-10-20 12:54:20

超神奇葩天才 发表于 2022-10-20 12:51
scanf可以指定宽度

谁告诉你的?
哪个教程这么教的?
把那个教程撕了,换一个好的

人造人 发表于 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的宽度意味着什么

人造人 发表于 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
$

超神奇葩天才 发表于 2022-10-20 13:33:35

遇到sb个老师为了难到我们出个这种题

jackz007 发表于 2022-10-20 13:54:25

超神奇葩天才 发表于 2022-10-20 13:33
遇到sb个老师为了难到我们出个这种题

       你应该感谢你的老师,他让你有机会对 scanf() 有了一个兜底的了解,从此以后,但凡遇到 scanf() 的问题,你会比别人有数得多!
页: [1]
查看完整版本: 奇怪的输出