如何在if语句中使用strcmp进行比较

Anamika Ana

我正在尝试创建一个从.ini文件读取数据的C程序。数据被读入一个名为buffer的变量。.ini文件中的数据如下所示:

 [key]
 title= A, H, D, F 

我的程序如下所示:

 LPCSTR ini = "C:\\conf.ini";
 char var[100];
 GetPrivateProfileString("key", "title", 0, var, 100, ini);
 char* buffer = strtok(var, ",");
 printf("The complete line is %s", var);

 buffer=strtok(NULL, ",");
 printf(buffer);

 while((buffer= strtok(NULL, ","))!=NULL)
     printf(buffer);

输出看起来像这样:

The complete line is A, H, D, F
A
H
D
F

现在,我要做的是将“缓冲区”中接收到的每个字母与字符“ A”进行比较,如果为真,则打印“是”,否则打印“否”。我尝试使用strcmp进行比较,但.exe文件停止运行。

if (strcmp(buffer, "A")==0)
    printf("Hello")
雷梅尔弗朗西斯科

这是我对您的代码所做的一些修复:

  • 我将strcmp()检查放在循环中,以便将从中提取的所有字符串strtok()都与进行相等性检查"A"

    分隔符之前的第一个字符串被提取到buffer,那么它继续从提取buffer直到NULL内部do-while循环。

  • 由于您ini文件的值具有以下格式,即逗号后的空格(", "),因此我将定界符从更改","", " (在逗号后添加空格)

    虽然这不会使检查平等太大的影响"A",因为A不会受到影响(因为它是价值的第一部分 A, H, D, F),检查逗号和空间之间,字母值(例如HDF将如果我们将使用"," (仅逗号)作为定界符,则会受到影响

修改后的代码

 #include <stdio.h>
 #include <windows.h>

 int main() {

       LPCSTR ini = "C:\\conf.ini";
       char var[100];
       GetPrivateProfileString("key", "title", NULL, var, sizeof var, ini);
       
       printf("The complete line is %s\n", var);
      
       // first piece of string (letter) before delimiter
       // changed delimiter from "," to ", "
       char* buffer = strtok(var, ", ");
       
       // exits if buffer is NULL
       if ( !buffer )
           return;

       do {  
           // prints the letter
           printf("%s", buffer);
           
           // checking if the extracted piece of code from var is equal with "A",  
           // prints either " Yes" or " No"
           ( !strcmp(buffer, "A") ) ? puts(" Yes") : puts(" No");

       // continues checking until NULL
       } while( buffer = strtok(NULL, ", ") );
 }

输出

The complete line is A, H, D, F
A Yes
H No
D No
F No

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章