为何输入第二组5位数字的提示不显示?C语言条码校验程序问题
条码校验位计算程序的输入异常问题
问题现象
运行下方的C语言条码校验位计算程序时,仅显示Enter First Six Digits :-的提示,输入第一组6位数字后,无法看到Enter Second Five Digits :-的提示,程序无报错但无法继续执行。
程序代码
#include <stdio.h> #include <stdlib.h> int a,b,c,d,e; int f,g,h,i,j; int add1; int s; int add2; int operation1; int subtraction; int Remainder; int checkdigit; int main() { printf("Enter First Six Digits :-"); scanf("%d %d %d %d %d %d " , &s , &a , &b, &c , &d , &e); printf("Enter Second Five Digits :-"); scanf("%d %d %d %d %d" , &f , &g , &h , &i , &j); add1 = s + b + d + f + h + j ; add2 = a + c + e + g + i ; operation1 = ((3*add1) + add2); subtraction = (operation1 - 1); Remainder = subtraction%10 ; checkdigit = (9 - Remainder); printf("Bar code Check digit :- %d " , checkdigit); }
问题原因
问题出在第一个scanf的格式字符串末尾的多余空格:"%d %d %d %d %d %d "。
scanf处理格式字符串时,会自动跳过输入中的空白字符(空格、换行、制表符等)。当格式字符串末尾存在空格时,scanf会持续等待输入非空白字符,直到遇到非空白内容才会结束当前输入操作。用户输入6个数字后按下的回车属于空白字符,因此scanf不会结束,程序卡在第一个输入步骤,导致第二个printf的提示信息被输出缓冲区暂存,无法显示在屏幕上。
解决方法
删除第一个scanf格式字符串末尾的空格,修改后的代码如下:
#include <stdio.h> #include <stdlib.h> int a,b,c,d,e; int f,g,h,i,j; int add1; int s; int add2; int operation1; int subtraction; int Remainder; int checkdigit; int main() { printf("Enter First Six Digits :-"); scanf("%d %d %d %d %d %d" , &s , &a , &b, &c , &d , &e); printf("Enter Second Five Digits :-"); scanf("%d %d %d %d %d" , &f , &g , &h , &i , &j); add1 = s + b + d + f + h + j ; add2 = a + c + e + g + i ; operation1 = ((3*add1) + add2); subtraction = (operation1 - 1); Remainder = subtraction%10 ; checkdigit = (9 - Remainder); printf("Bar code Check digit :- %d " , checkdigit); }
修改后,scanf在读取完6个整数后会立即结束输入操作,程序会正常执行第二个printf提示,等待用户输入第二组数字。
内容的提问来源于stack exchange,提问作者user26419966
相关产品推荐
相关产品推荐

