gpt4 book ai didi

c - 带有 char 数组的 sscanf 始终评估为 true

转载 作者:行者123 更新时间:2023-11-30 15:52:14 24 4
gpt4 key购买 nike

我遇到了一个问题,我的 sscanf 行始终评估为 true。如果 fgets 传递给它一个没有数字的字符串,我希望它评估为 false...这里有什么建议/帮助吗?

int main(void){
int choice;
char buffer[LINESIZE];

while (1){
printf("\nprompt");

if(fgets(buffer,LINESIZE, stdin)){
if(sscanf(buffer, "%d", &choice)){
/* do something*/
else
/*do something else*/

最佳答案

正如评论中所述,sscanf() 返回匹配的参数数量; C中的标准行为是0被隐式转换为FALSE,而其他任何内容都被转换为true,所以我猜可能会发生两件事:要么你的字符串总是包含一个整数并且它总是读取一些东西,要么你的编译器正在做一些奇怪的事情,它是将 0 转换为 true(很奇怪)

但在这两种情况下,您都可以按如下方式修改代码来修复此问题

int main(void){
int choice;
char buffer[LINESIZE];

while (1){
printf("\nprompt");

if(fgets(buffer,LINESIZE, stdin)){
if(sscanf(buffer, "%d", &choice) != 0){ // be carefull with EOF
/* do something*/
else
/*do something else*/

您将得到想要的结果,并且您将拥有更具可读性的代码(并且是正确的,因为您不执行奇怪的转换)

关于c - 带有 char 数组的 sscanf 始终评估为 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14610840/

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