具有char数组的sscanf始终评估为true

时间:2013-01-30 18:11:23

标签: c

我遇到了一个问题,我的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*/

1 个答案:

答案 0 :(得分:1)

如评论中所述,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*/

你将获得想要的结果,你将拥有更易读的代码(并且因为你没有做出奇怪的演员而更正)