首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

printf没有给我正确的输出,也许scanf是错的,请指教

在这个问题中,你提到了两个常见的C语言函数,printf和scanf。printf函数用于将数据输出到标准输出设备(通常是控制台),而scanf函数用于从标准输入设备(通常是键盘)读取数据。

如果printf没有给出正确的输出,可能是因为scanf的使用出现了问题。scanf函数用于从标准输入设备读取数据,并根据格式化字符串的指示将数据存储到相应的变量中。如果格式化字符串与输入数据不匹配,就会导致scanf读取错误,进而影响到printf的输出结果。

在这种情况下,你可以检查以下几个方面:

  1. 格式化字符串是否正确:确保格式化字符串与输入数据的类型和顺序匹配。例如,如果你想读取一个整数,格式化字符串应该是"%d",如果你想读取一个浮点数,格式化字符串应该是"%f"。
  2. 变量是否正确传递给scanf函数:确保你将要读取的变量作为参数传递给了scanf函数,并且使用了取地址符"&"。例如,如果你想读取一个整数并将其存储在变量num中,应该使用scanf("%d", &num)。
  3. 检查输入数据的格式:如果输入数据的格式与你的期望不符,可能会导致scanf读取错误。例如,如果你期望输入一个整数,但用户输入了一个非数字字符,scanf将无法正确读取。
  4. 错误处理:在使用scanf函数时,建议对其返回值进行检查,以便及时发现读取错误。scanf函数返回成功读取的参数个数,如果返回值与你期望的不一致,可能意味着读取错误。

如果你仔细检查了以上几个方面,仍然无法解决问题,可能是代码其他部分的问题导致了printf输出不正确。在这种情况下,建议逐步调试代码,检查每一步的输出结果,以找出问题所在。

总结起来,当printf没有给出正确的输出时,可能是由于scanf的使用出现问题。你可以检查格式化字符串、变量传递、输入数据格式和错误处理等方面,以解决问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

1058 选择题 (20 分)

,并且指出哪道题的人最多。...随后 M 行,每行顺次给出一道题满分值(不超过 5 正整数)、选项个数(不少于 2 且不超过 5 正整数)、正确选项个数(不超过选项个数正整数)、所有正确选项。...注意:题目保证学生答题情况合法,即不存在选中选项数超过实际选项数情况。 输出格式: 按照输入顺序给出每个学生得分,每个分数占一行。注意判题时只有选择全部正确才能得到该题分数。...如果所有题目都没有,则在最后一行输出 Too simple。...如果全对了,就赶紧输出too simple不要等着最后输出,因为我写太乱,最后输出就出了个,也没找出来,但是放前面就直接过了,遇不到这个坑 我辣鸡代码 #include using

60320

c语言scanf函数用法详解_c语言输入scanf格式

比如一个整型数据,通过 printf 输出时用%d输出,通过 scanf 输入时同样用%d。 要想将程序中 scanf 行弄明白,首先要清楚:我们从键盘输入全部都是字符。...但是经常有人问,为什么 printf 中可以有“非输出控制符”,而 scanf 中就不可以有“非输入控制符”。事实上不是不可以有,而是没有必要!...最后再次强调:scanf“输入参数”取地址符&千万不要忘了。这是初学者经常犯错误。而 printf输出参数”不带取地址符,不要混淆了。...更严重,这种错误在编译时候不会报错。printf 也是一样,即使“输出参数”少写了也不会报错,但从程序功能上讲这么写就是。所以在编程时候一定要避免这种错误发生。...这个在《为什么要初始化变量》中讲过,当变量没有初始化时候就会输出这个值。 在后面会讲到 scanf 缓冲输入,也就是说从键盘输入数据都会先存放在内存中一个缓冲区。

3.6K31

2018年真题上海市计算机等级二级C语言

2.设有变量定义:char ch; 若将小写字母a赋给变量ch,正确表达式:(_____)。说明:小写字母aASCII码值97。...A.ch='a' B.ch='97' C.ch=a D.ch="a" 3.设有变量定义:int a=345,b=123; 则执行语句printf("%2d-%2d",a,b);后,输出结果:(___...带错误源程序: #include intmain(void) { float weight,height; printf("输入身高和体重:"); scanf...,j,k; printf("输入待移位字符串:"); getchar(a); printf("输入k值:"); scanf("%d",&k); for (...根据小明从机场到达酒店里程数,计算应付出租车价格。(注:里程输出保留1位小数,价格输出精确到元,不考虑红绿灯和堵车等待费用)。 ? 运行示例1: 运行示例2: ? ?

3.6K11

1058. 选择题(20)

批改多选题比较麻烦事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题的人最多。 输入格式: 输入在第一行给出两个正整数N(<=1000)和M(<=100),分别是学生人数和多选题个数。...随后M行,每行顺次给出一道题满分值(不超过5正整数)、选项个数(不少于2且不超过5正整数)、正确选项个数(不超过选项个数正整数)、所有正确选项。注意每题选项从小写英文字母a开始顺次排列。...最后N行,每行给出一个学生答题情况,其每题答案格式为“(选中选项个数 选项1 ……)”,按题目顺序给出。注意:题目保证学生答题情况合法,即不存在选中选项数超过实际选项数情况。...输出格式: 按照输入顺序给出每个学生得分,每个分数占一行。注意判题时只有选择全部正确才能得到该题分数。最后一行输出错得最多题目的错误次数和编号(题目按照输入顺序从1开始编号)。...如果有并列,则按编号递增顺序输出。数字间用空格分隔,行首尾不得有多余空格。如果所有题目都没有,则在最后一行输出“Too simple”。

60710

c语言每日一练(14)【加强版】

五道易选择题: 1、以下正确程序段() A、char str[20];scanf("%s",&str); B、char *p;scanf("%s",p); C、char str[20];scanf...B选项,++a,a地址啊,你怎么能对地址修改呢,B大错特。C选项,12个字符拷贝进只能存放11个字符数组,拷贝失败,C错误。...B选项,scanf("%d",*p);pn地址,*p即是n,你scanf("%d",n);没有取地址,无法进行值修改,B错误。...C选项,scanf("%d",&n);这一步没有问题,简单修改n变量值,*p=n就很有问题,因为你p并没有初始化为空指针,所以此时p一个野指针,你对野指针解引用并赋值会造成不可预知后果,所以C错误...综上所述,答案选D 4、以下程序段中,输出信息不能正确反映变量大小关系() A、 if (x > y) printf(" x > y ");//1 if (x < y) printf("x

9710

【03】逆序数组

("输入你要输入数个数:"); scanf("%d", &j); int arr[] = { 0 };//注意这里数组没有确定个数 for (i = 0; i < j; i++) {...("%d\n",arr[i]); } } int main() { reverse(); return 0; } 由于上述代码利用数组存储个数时没有确定数组个数就会导致如下情况: 正确做法:...> void reverse() { int i = 0; int j = 0; int tmp = 0; printf("输入你要输入数个数(<10):"); scanf("%d", &...("输入你要输入数个数(<10):"); scanf("%d", &j); int arr[10] = { 0 }; for (i = 0; i < j; i++) { scanf(...~土土这里用了两种方法一种直接发利用左右两个指针来遍历,另一种创建临时数组来将原来数组中数从后往前放置,两种方法各有优缺点哦~如果有什么问题,欢迎打在评论区或者私法给我哦~

10010

C语言对猜数游戏优化(防止输入错误)

但是其实,我们往往在输入时候有输情形,在玩游戏时直接影响了愉悦心情....= '\n'); // 清除缓存区 } return n; } 此处解释一下 我们输入时候有可能会输入其他字符,但是正常使用scanf时会出现以下情形: 可以看到这里我们没有一直输入数据...,但是程序一直循环,因为在第一次输入数据时,我不小心输入了一个字符'a',但是scanf读取要求类型与输入类型不符合,然而又被留在scanf缓存区中了,故一直循环读取scanf缓存区内容,形成了死循环...); break; } count--; trueCount++; } if (count == 0) { printf("次数用尽,正确答案%d\n", ret); }...); break; } count--; trueCount++; } if (count == 0) { printf("次数用尽,正确答案%d\n", ret); }

12310

【初学者入门C语言】之选择结构语句(三)

特别注意if条件表达式后面没有; 实例 输入您年龄,如果大于18,输出已成年 代码: #include "stdio.h" int main() { int age; scanf...语句序列1 } else{         语句序列2 } 如果表达式为真则执行{}里语句序列1,如果不满足表达式条件则执行else里语句序列2 实例 输入您年龄,如果大于18,输出已成年,...实例 输入您年龄,如果小于12,输出儿童,如果大于18小于65,输出青年,否则输出老年 代码: #include "stdio.h" int main() { int age; scanf...代码: #include "stdio.h" int main() { int month, day; printf("输入月份:"); scanf("%d", &month); switch...,输出该月天数 代码: #include "stdio.h" int main() { int year, month, day; printf("输入月份:"); scanf("%d%

56640

c语言每日一练(1)

5道选择题: 1、执行下面程序,正确输出( ) #include int x=5,y=7; void swap() { int z; z=x; x=y; y=z; } int main...但是,但是,要注意一点,swap并没有传参,更没有传实参,也就是说,交换x,y影响不到main函数中,它交换仅仅只是全局变量x,y 所以最后打印出来结果为原来数据,也就是3,8,选C...综上所述,答案为C 5、有如下定义语句,则正确输入语句【多选】( ) int b; char c[10]; A: scanf("%d%s",&b,&c); B: scanf("%d%s",&b...,c); C: scanf("%d%s",b,c); D: scanf("%d%s",b,&c); 解析:b一个整型,c一个字符数组,而只有数组名字在9成9情况下代表着数组起始地址。...选项C,b,没取地址,故C。选项D和选项C犯了一样错误,故D

12510

用C语言来实现简单猜数字游戏

1 游戏简单介绍: 猜数字游戏是一个简单易懂游戏,内容大概系统随机给定一个1~100之间数字,玩家来猜,若猜错了则提示猜大了或者猜小了,直到猜为止。...范围就是1~100; 因为猜数字游戏很难一次就猜对数字,所以我们一般要猜很多次,故而我们需要使用while函数来实现循环,直到游戏结束为止,在这里我们可以创建一个变量ret = 1;如果没有猜对,那ret...; 我们需要输入一个数字count和我们系统随机给数字r进行比较,如果count r则输出猜大了。...) % 100 + 1; int count = 0; int ret = 1; printf("输入你想要猜数字\n"); while (ret) { scanf("%d", &count...("输入你想要猜数字\n"); while (ret) { scanf("%d", &count); if (count < r) { printf("猜小了\n"); }

13210

【C语言】getchar 函数正确使用

目录 一、getchar 函数 二、缓冲区 1、什么缓冲区 2、为什么要存在缓冲区 3、缓冲区类型 4、缓冲区刷新 三、getchar 函数正确使用 1、getchar 换行问题...2、getchar 与 scanf 混合使用 ---- 一、getchar 函数 从上面的介绍来看,我们要正确使用getchar函数,首先得了解什么缓冲区。...}; printf("输入密码:>"); scanf("%s", password); printf("确认密码(Y/N):>"); int ch = getchar(); if (ch == 'Y...,原因就是我们缓冲区中存放abcdef\n,而scanf函数遇到空格、换行符(\n)、Tab时结束,所以\n并没有被读取走,而是继续留在了缓冲区中,而当getchar读取数据时发现缓冲区中并不为空...("输入密码:>"); scanf("%s", password); getchar(); //读取剩下\n printf("确认密码(Y/N):>"); int ch = getchar();

1.3K50

C语言实现三子棋

1.开始界面 可以用一系列输出函数将开始界面进行输出,1为开始游戏,0为退出游戏,同时在主函数里进行调用,为了防止输入一次就结束运行,可用do while循环,先循环一次,再根据输入1还是0判断是否继续进行循环...,再根据input值进行判断是否继续 menu(); printf("选择:\n"); scanf_s("%d", &input); switch (input) { case...printf("输入要下棋坐标:>"); scanf_s("%d %d", &x, &y); if (x >= 1 && x = 1 && y <= col)...赢条件,任意棋子满足横竖或对角线即可,我们可以对数组所存放值与位置进行判断,如果满足,返回对应棋子,如果都没有满足,则进行平局判断,通过对里面的空格数进行判断,如果都没有,则说明棋盘已满,且同时没有满足输赢条件...)); do { menu(); printf("选择:\n"); scanf_s("%d", &input); switch (input) { case 1: game

10010
领券