奇怪的输出
本帖最后由 超神奇葩天才 于 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 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> 谁教给你scanf这么用的?
scanf可以指定宽度?
人造人 发表于 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:22
谁教给你scanf这么用的?
scanf可以指定宽度?
scanf可以指定宽度 超神奇葩天才 发表于 2022-10-20 12:51
scanf可以指定宽度
谁告诉你的?
哪个教程这么教的?
把那个教程撕了,换一个好的 https://cplusplus.com/reference/cstdio/scanf/
https://www.apiref.com/cpp/cpp/io/c/scanf.html
我记得scanf不可以指定宽度的
但是scanf确实可以指定宽度
我只找到了 %s 和 %[ 的宽度说明
其他没有,不知道 %d的宽度意味着什么
好吧,scanf可以指定宽度,但是通常不会是你期望的结果
$ cat main.c
#include <stdio.h>
int main(void) {
int x;
scanf("%3d", &x);
printf("%d\n", x);
return 0;
}
$ ./main
12345
123
$
遇到sb个老师为了难到我们出个这种题 超神奇葩天才 发表于 2022-10-20 13:33
遇到sb个老师为了难到我们出个这种题
你应该感谢你的老师,他让你有机会对 scanf() 有了一个兜底的了解,从此以后,但凡遇到 scanf() 的问题,你会比别人有数得多!
页:
[1]