2013-09-27 36 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 '@',新字符串中可能会有更多这样的特殊字符。你可以把支票多久?