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'&&numHex
fflush(标准输入);
会导致未定义的行为。例如,您应该使用
'0'
而不是
48
numHex
将永远不会是
\n
。格式字符串开头的空格使其跳过空白。写入“0”或“48”是相同的…我尝试在%c之前不使用空格进行扫描,但没有任何帮助。这是一些错误什么太复杂了。为什么不:
if((c>='0'&&c='a'&&c='a'&&c
fflush(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);
}