2012-04-02 9 views
0

ユーザーからの入力を正の値に制限し、その数値の桁数をカウントする必要があります。ユーザーは9文字までの(+/-)整数だけを入力します。cでscanfのみを使用している桁数をカウントする

私はscanf関数とfor、while、do-whileループのみを使用することができます(getcharを使用してこれを行う方法は似たようですが、scanfのみ使用できます)。私は、私は私が書くかのことを知っているstdio.hのほかの配列、または他のライブラリを使用して

をMATH.Hすることはできませんよ。

N =のscanf( "%C%C%C% c%c」、&a、&b、&c、&e、&f)。

nは、成功したscanf変換の回数をカウントします。

問題は、私がcharで入力を定義すると、ユーザーが5文字を入力しなければならないことを除いて、すべてを行います。したがって、ユーザが「55」を入力したい場合は、「5」「5」「enter」「enter」「enter」を押す必要があります。

最初の「入力」の後に移動するプログラムが必要ですが、最大9桁の数字を受け取れるように柔軟性があります。

もう一度、getcharや何か気になるものは使用できません。あなたが最初の2週間で学ぶCのちょうど本当に基本的なもの。数字

あなたはプログラムが-ve番号が入力された場合に行うには何をしたいかの数をカウントする/ 10でループに使用、その後、long intに番号を読み取るために

答えて

1

使用のscanf ?

#include<stdio.h> 
int main() 
{ 

    long int a; 
    int b; 
    do 
    { 
    scanf ("%ld",&a); 
    if(a<0) 
     printf ("invalid input"); 
    }while(a<0); 

    for(b=0;a!=0;b++,a=a/10); 
    printf("%d",b); 
} 

(特別-ve数値を扱いません)

+0

ありがとう、これは私が必要なものです。負の数は「無効な入力」を促し、ループに戻ります。 – nofe

+0

無効な入力プロンプトを表示するようにコードを更新しました。 if条件を使用することが許可されていない場合、if条件をwhileループに置き換えることは簡単です。 – Akash

+0

if条件を使用できます。条件の後にセミコロンがあるはずですか?どうもありがとう! – nofe

0

私はかかるだろうなアプローチは、次のようになります。

  1. ループは許可されていますので、1つ上に設定してください。
  2. 現在の番号を把握するための変数が必要です。
  3. 一度に1文字ずつ数字を入力することを考えてみましょう。 current_number変数に何が必要ですか?
  4. リターンキーを押すとループを停止する必要があります。

このような何かはスターターのために行う必要がありますが、私は次のようになり、特に何return_check(ch)update_state(current_val)char_to_int(ch)、あなた次第残りの部分を残しておきます。また、関数を使用するのではなく、自分の関数をコードに直接記述してください。

update_state内のロジック(用として
int current_val=0; 
int num_digits=0; 
char ch="\0" 

for (num_digits=0;return_check(ch) && num_digits<=9;num_digits++) 
{ 
    fscanf("%c"); 
    current_val=update_state(current_val); 
    current_val=current_val+char_to_int(ch); 
} 

)、12から1と異なるcurrent_valどのように123456789のような数のユーザーが、タイプ、場合、一度に、何が起こるかについて、一つの文字を考えると、 a12〜a123。

0

あなたは、(構文のすべてが正しい場合、私は知らない)のようなもの、その周りにループをラップすることができます:

const int max_size=9 
int n=0; //counter for number of chars entered 
char a[max_size-1]; 
do { 
    scanf(%c,&a[n]); 
    n++; 
} while (a[n] != '\r' && n<max_size) 
1

何か

#include <stdio.h> 

int main(void) 
{ 
    char buffer[10] = { 0 }; 
    size_t len; 

    scanf("%9[0-9]", buffer); 
    for(len = 0; buffer[len] != 0; len++) ; 
    printf("%zu '%s'\n", len, buffer); 

    return 0; 
} 

のような作品が、私ドンそれがあなたの必要に合っているかどうかは分かりません。 size_tが良いですが、あなたは、int型(またはunsigned int型)と size_tを置き換えることができます

EDIT(説明のビット)。その場合は%zuの代わりに%dまたは%uを使用してください。

基本的な考え方は、scanfの形式の機能を利用することです。 9[0-9]は、入力がfor(...)がcharをカウントするだけの方法、strlenの簡単な実装である9.

まで、すなわち0からの数字指定されたセットの中で最大9文字のシーケンスであると言います。次に、結果を印刷します。

+0

string.hライブラリを使用できません... – nofe

+0

それを削除して、使用されていません。最初にstrlenを使って、それをforループに変えました。あなたがそれを使うことができなかったことがわかった時) – ShinTakezou

関連する問題