C 为什么printf在一个循环中只打印一次,只针对第一个输入?
输出:C 为什么printf在一个循环中只打印一次,只针对第一个输入?,c,printf,C,Printf,输出: lds 预期: Error! l is not a valid digit in base 16 我也不明白为什么while循环在我单击Enter后没有停止。fflush(stdin)不是标准的C。但是在它工作的系统(Windows)上,它将丢弃所有尚未被缓冲的输入。因此,在扫描第一个字符l后,这将导致ds被丢弃,并等待您键入新的输入行 如果您想让它处理行中的剩余字符,请删除该调用。fflush(stdin)不是标准的C。但在它工作的系统(Windows)上,它将丢弃所有尚未处理的缓
lds
预期:
Error! l is not a valid digit in base 16
我也不明白为什么while循环在我单击Enter后没有停止。fflush(stdin)
不是标准的C。但是在它工作的系统(Windows)上,它将丢弃所有尚未被缓冲的输入。因此,在扫描第一个字符l
后,这将导致ds
被丢弃,并等待您键入新的输入行
如果您想让它处理行中的剩余字符,请删除该调用。fflush(stdin)
不是标准的C。但在它工作的系统(Windows)上,它将丢弃所有尚未处理的缓冲输入。因此,在扫描第一个字符l
后,这将导致ds
被丢弃,并等待您键入新的输入行
如果希望调用处理行的剩余字符,请删除该调用。由于第二个
scanf
中的空格,while
循环未退出
如果使用字符常量而不是硬编码的数字会更好一些
Error! l is not a valid digit in base 16
Error! s is not a valid digit in base 16
while(numHex!='\n'){
isNum=isHighAf=isLowAf=0;
如果(numHex>='0'&&numHex='A'&&numHex='A'&&numHexwhile
循环由于第二个scanf
中的空间而不退出
如果使用字符常量而不是硬编码的数字会更好一些
Error! l is not a valid digit in base 16
Error! s is not a valid digit in base 16
while(numHex!='\n'){
isNum=isHighAf=isLowAf=0;
如果(numHex>='0'&&numHex='A'&&numHex='A'&&numHexfflush(标准输入);
会导致未定义的行为。例如,您应该使用'0'
而不是48
。numHex
将永远不会是\n
。格式字符串开头的空格使其跳过空白。写入“0”或“48”是相同的…我尝试在%c之前不使用空格进行扫描,但没有任何帮助。这是一些错误什么太复杂了。为什么不:if((c>='0'&&c='a'&&c='a'&&cfflush(stdin);
会导致未定义的行为。例如,您应该使用'0'
而不是48
。numHex
将永远不会是\n
。格式字符串开头的空格使其跳过空白。写入“0”或“48”是相同的…我尝试在%c之前不使用空格进行扫描,但没有任何帮助。这是一些错误什么太复杂了。为什么不:如果((c>='0'&&c='a'&&c='a'&&c='a'&&c)第二个scanf()
将导致所有剩余的缓冲数据至少在Microsoft的实施中被丢弃。您的答案将该问题解决为,但您没有明确提及。建议将第二个和第三个if
更改为,否则if
-一旦确定字符类型,就没有理由测试其他类型。同意。我已经编辑了我的帖子……谢谢你的反馈!!!第二个scanf()
中的空格在你发布前10分钟被edit删除了。fflush(stdin)
将导致所有剩余的缓冲数据至少在Microsoft的实施中被丢弃。您的答案将该问题解决为,但您没有明确提及。建议将第二个和第三个if
更改为,否则if
-一旦确定字符类型,就没有理由测试其他类型。同意。已经编辑了我的帖子……谢谢你的反馈!!!
while(numHex != '\n'){
isNum = isHighAf = isLowAf = 0;
if(numHex >= '0' && numHex <= '9')
isNum = 1;
else if(numHex >= 'A' && numHex <= 'F')
isHighAf = 1;
else if(numHex >= 'a' && numHex <= 'f')
isLowAf = 1;
if(!isNum && !isLowAf && !isHighAf)
printf("Error! %c is not a valid digit in base 16\n", numHex);
//else - Hexadecimal to Decimal converter
//fflush(stdin);//undefined behavior
scanf("%c", &numHex);
}