2013-09-27 38 views
0

我試圖做出三個簡單的c程序,但我只限於其中的一個,因爲這第一個問題只針對一個。 (是啊,這是硬件的情況下,你是好奇。)如何從C字符串中提取數字?

對於這個程序,我們的目標是創建一個可以採取的字符串:

"BCC 6 T LL 8 9 *** & [email protected]@@@@" 

和輸出/打印

"689" 

我將在下面粘貼的代碼是我對此的悲傷嘗試,實際上我沒有得到任何結果。任何幫助表示讚賞。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 

int main() 
{ 
printf("BCC 6 T LL 8 9 *** & [email protected]@@@@\n"); 

char ch=getchar(); 
while(ch!='\n') 
    { 
    if(isdigit(ch)|| ch!='*' || ch!='@') 
     printf("%c", ch); 
    } 
return 0; 
} 
+1

您是否期待'getchar()'在您打印的行中讀取?或者是用戶應該複製並粘貼輸出? – Barmar

+0

我正在爲getchar()讀取行,但它本來可以是。 – Jormungandr

+0

你不需要爲編碼新手道歉:這裏的每個人都在某處。 – dasblinkenlight

回答

0

試試這個:

while ((ch = getchar()) != '\n') { 
    if (isdigit(ch) { 
     printf("%c", ch); 
    } 
} 

你的代碼有一個嚴重的問題:你是不是要求getchar()while循環中。所以它只會讀取一個字符並重復處理相同的字符。另一個問題是您的if條件 - ch != '*' || ch != '@'的測試適用於所有字母和空格字符。如果您只想打印數字,則不需要進行這些測試。

正如我在評論中提到的,這將處理用戶輸入的內容,而不是用printf()打印的內容。

+0

啊我現在明白了。非常感謝,我很感激! – Jormungandr

0

根本就

while(ch!='\n') 
    if(ch >= '0' && ch <= '9') 
     printf("%c",ch); 

一個整潔和簡單的代碼。 沒有必要當你使用它ch >= '0'字符的ASCII 價值「0」 一旦條件保持爲真,你的數字將被打印比較調用一個單獨的函數isdigit()。還有no need to check for '*' and '@',新字符串中可能會有更多這樣的特殊字符。你可以把支票多久?