gpt4 book ai didi

c - scanf 不会以十六进制值终止?

转载 作者:行者123 更新时间:2023-11-30 17:17:38 25 4
gpt4 key购买 nike

当我运行此代码时:

main(){

int hex;
printf("Enter four hex values:\n");
while(scanf("%x", &hex) == 1)
{
body
}

}

它运行代码主体,但随后显示光标,因此用户可以输入更多数据,直到输入 NULL。如何修复 while 循环,以便一旦用户输入数据,例如 014C 456B 0894 0011 (一些随机的十六进制数字),它就会执行主体,然后程序终止?即,为什么循环仅在用户输入 NULL 时结束以及如何解决此问题?

最佳答案

您调用 scanf() 直到收到错误或 EOF(测试值的数量是件好事 - 您会因此获得良好的分数)。如果只想调用四次,那么就得单独限制:

int main(void)
{
int hex;
printf("Enter four hex values: ");
for (int i = 0; i < 4 && scanf("%x", &hex) == 1; i++)
{
…body…
}
return 0;
}

请注意在调用 scanf() 时使用 &hex 而不仅仅是 hex;你总是需要传递一个指针(但如果对象是一个数组,通常是一个字符串,那么你可以通过名称传递它,前面不带 & )。

如果需要检测在获取四个值之前是否退出,请在循环外部定义 i 并在之后进行测试。

另请注意 main() 的显式返回类型;这是当前和以前版本的 C 标准所要求的。只有古老的、四分之一世纪前的标准第一个版本允许隐式 int。该标准需要从 main() 返回值,而现代的标准可以让您摆脱困境(更遗憾的是,IMO)。

关于c - scanf 不会以十六进制值终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29381517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com