2016-11-20 60 views
3

我會盡力使我的問題很短。 雖然,我是一個初學者程序員,所以我真的很抱歉我的愚蠢問題。C - 在一個字符串上使用scanf來獲得一個數字

我有一個字符串。 我想用scanf給這個字符串一個值。 該值甚至可以是單個數字(但我也希望該數字作爲字符)。

所以我做了這個代碼:

char string[20]; 
scanf("%s", string); 

//LETS ASSUME WE ONLY WRITE THE NUMBER 1 IN THE STRING 

if(string=='1') 
printf("You have entered a single number: 1"); 

// IF I WOULD RUN THIS PROGRAM THE PRINTF PART WOULD NOT HAPPEN. WHY? 

這個代碼僅僅是當然的一個例子。 在我的程序中,我會做一個與IF不同的事情,而不是簡單的printf。

雖然,使用此代碼,如果我將字符串1作爲值,然後按Enter鍵,但我在IF中編寫的內容不會因爲某些原因而發生。

任何人都可以給我一個解釋,我應該怎麼做,然後才能使它工作?那麼我應該如何編寫IF部分?

+0

@ user3121023嘿,我試過了,我想我有字符串現在,但我不明白的東西,我試圖做到這一點:做了一個新的字符串所以我可以使用strcmp, - > char helper [20];然後做了這個:helper [0] ='1';輔助[1] = '\ 0';假設用戶將字符串數字1作爲一個值,然後執行strcmp(string,helper);結果它給了我一個1。但它應該給我一個0,因爲兩者是平等的。問題是什麼? – Noxter

+0

@ user3121023它的工作!非常感謝你幫助我!祝你今天愉快! – Noxter

+0

同時告訴'scanf()'它可以將多少個字符存儲到'string'中以防止潛在的緩衝區溢出:'scanf(「%19s」,string);' – chqrlie

回答

1

使用(要小心,因爲單引號意味着char值,而不是一個字符串)

#include <string.h> 

... 

if (strcmp(string, "1") == 0) /* if it returns 0, the string contents are the same for both strings */ 

... 

爲C沒有直接支持做字符串比較,和你實際上是比較兩個三分球(甚至如果它們存儲的值相同,它將不會與字符串文字"1"string變量位於計算機內存中的不同位置時的指針相同。