簡體   English   中英

如何在if語句中使用strcmp進行比較

[英]How to use strcmp in if statement to compare

我試圖創建一個從.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")

從您的輸入格式來看,存在空格,您沒有將其視為定界符。 因此,按預期,這些空格將出現在字符串型bu buffer 你可以做

  • 將分隔符更改為" ,"
  • 寫入if (strcmp(buffer, " A")==0) ,依此類推。

那就是

  1. printf(buffer); 是一個壞風格。 要么使用puts(buffer)要么更喜歡printf("%s", buffer)
  2. 在使用返回的指針之前,請檢查strtok()NULL返回。

這是我對您的代碼所做的一些修復:

  • 我將strcmp()檢查在循環中,以便將從strtok()提取的所有字符串都與"A"進行相等性檢查。

    定界符之前的第一個字符串被提取到buffer ,然后繼續從buffer提取直到do-while循環內的NULL

  • 由於您的ini文件的值具有逗號后加空格( ", " )的格式,因此我將定界符從","更改為", " (在逗號后添加空格)

    盡管由於不會影響A (因為它位於值 A, H, D, F 的第一部分),因此在檢查與"A"相等性方面不會產生太大的影響,但請檢查-如果我們將"," (僅逗號)用作定界符","則逗號和空格(例如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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM