0

私は 3 つの単純な C プログラムを作成しようとしていますが、この最初の質問は 1 つだけに固有であるため、これをそのうちの 1 つだけに制限します。(ええ、これはあなたが興味を持っている場合に備えてです。)

このプログラムの目標は、次の文字列を取ることができるプログラムを作成することです。

"BCC  6 T LL 8 9 *** & EXTRA@@@@@"

および出力/印刷

"689"

以下に貼り付けるコードは、これに対する私の悲しい試みであり、実際には結果が得られませんでした。どんな助けでも大歓迎です。

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

int main()
{
printf("BCC  6 T LL 8 9 *** & EXTRA@@@@@\n");

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

2 に答える 2

0

これを試して:

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

コードには 1 つの重大な問題がありました。ループgetchar()内で呼び出していませんでした。whileしたがって、1 つの文字を読み取り、同じ文字を繰り返し処理します。他の問題はあなたのif状態でした. のテストはch != '*' || ch != '@'すべてのアルファベットとスペース文字に当てはまります. 数字だけを印刷したい場合は、それらのテストは必要ありません。

コメントで述べたように、これは、で印刷したものではなく、ユーザーが入力したものを処理しますprintf()

于 2013-09-27T01:04:50.723 に答える
0

単純に

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

すっきりとシンプルなコード。別の関数を呼び出す必要はありませんisdigit()。使用すると、文字のASCII値と「0」ch >= '0'が比較 されます。条件が真になると、数字が出力されます。もあり、新しい文字列にはそのような特殊文字がさらに存在する可能性があります。どのくらいの期間小切手を入れることができますか?no need to check for '*' and '@'

于 2013-09-27T04:28:38.860 に答える