[英]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)
,依此類推。 那就是
printf(buffer);
是一個壞風格。 要么使用puts(buffer)
要么更喜歡printf("%s", buffer)
。 strtok()
的NULL
返回。 這是我對您的代碼所做的一些修復:
我將strcmp()
檢查在循環中,以便將從strtok()
提取的所有字符串都與"A"
進行相等性檢查。
定界符之前的第一個字符串被提取到buffer
,然后繼續從buffer
提取直到do-while
循環內的NULL
。
由於您的ini
文件的值具有逗號后加空格( ", "
)的格式,因此我將定界符從","
更改為", "
(在逗號后添加空格) 。
盡管由於不會影響A
(因為它位於值 A, H, D, F
的第一部分),因此在檢查與"A"
相等性方面不會產生太大的影響,但請檢查-如果我們將","
(僅逗號)用作定界符","
則逗號和空格(例如H
, D
, F
)之間的距離將受到影響。
修改后的代碼
#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.