• ベストアンサー

文字を認識する方法。

こんばんわ、matsuhiraです。 どうか今にもオオカミに食べられてしまいそうな かわいそうな子羊をお助けください。 今組んでいるプログラムの内容はこうです。 まず、int型の配列に数字をいくつかscanfで入力していって、 半角小文字の'x'を入力すると、入力した値を出力するという とっても簡単なプログラムなんです。 でも、私考えすぎなのかどうか分からないんですけど、 できないんです、このプログラムが! 情けなさすぎてなんだか自暴自棄の泥沼にはまっちゃいました。 抜け抱けません。もがけばもがくほど深い漆黒の闇に消えてしまいそうです。 助けてください。お願いします。 どんと一発ぶちかましちゃってください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

  #include <stdio.h> #define MAX 256 int main(void) { int number[MAX]; char ch; int end, head, i, j; end = 1; i = 0; do{ if(!scanf("%d", &number[i % MAX])){ if(end = (getchar() != 'x')) while(getchar() != '\n') ; } else i ++; }while(end); head = (i % MAX) * (i >= MAX); for(j = 0; j < MAX && j < i; j ++){ printf("%d ", number[(head + j) % MAX]); } return 0; }  

matsuhira
質問者

お礼

こんばんわ、matsuhiraです。 ありがとうございます!!! 返事が遅れてしまい申し訳ありません。 プログラム作成に夢中になってました。 そんなプログラムですが、なんと、なんと・・・ 完成しちゃいましたぁ~~~~~~。。。 やった、やった、やった(^0^)(^0^)(^0^)。 笑顔いつもの3つ分なんてうれしすぎ。ウフッ。 これもすべてyaemon_2006さんのおかげです。 getcharを使うとはおみそれしました。 これからは勝手に師匠と呼ばせていただきまっすっ。 これからは師匠に少しでも近づけるべく万進していく所存です。 師匠、かっこよすぎっす!

その他の回答 (4)

回答No.5

   char ch; は、不要。  

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

scanf( "%d", &suji[i] )に対して 'x'を入力した場合 suji[i]には何も代入されません ... scanfを呼び出す前と同じ状態 whileループに入る前に 配列sujiを 0などで初期化しておくなどして数字が入力されたかどうか判定してみましょう 初期化の例 memset( suji, 0, sizeof( suji )); また、 while( x != 0 ) となっていますが xが0で初期化されているので ループ自体を回りませんよ ... 単なるタイプミスでしょうけど ループ中で sujiの添え字用のiが変化していませんね memset( suji, 0, sizeof( suji )); while ( 1 ) {  scanf( "%d", &suji[i] );  if ( suji[i] == 0 ) {   // whileループを脱出   break;  }  cnt++;  i++; } としてもいいでしょう ...

matsuhira
質問者

補足

こんばんわ、matsuhiraです。 すばらしい!!!天才!!! なんて俺からほめられてもうれしくないですよね。 はぁ~こんな関数があるなんて知りませんでした。 まだまだプログラミングの底は深いですねぇ~。 細かな間違いまで指摘していただいてお恥ずかしい限りです。 恥ずかしついでにもう一声!ということで。 入力処理の終了条件を'x'を入力すると終了としたいんです。 'x'のみ。それ以外はダメ。'a'も'z'もダメ。といった条件です。 お涙頂戴とわがまま聴いてください。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.2

scanf()は、キーボードからの入力には使わないようにしたほうが良い関数です。必要があれば、fgets()とsscanf()を使うほうが泥沼に嵌らずにすみます。

matsuhira
質問者

補足

こんばんわ、matsuhiraです。 このような方法があるとは知りませんでした。感服いたします。 ですが、これ、どう使えばよろしいのでしょうか? ファイルの読みこみのようなことが参考書に載っておりましたが、 特にファイルを読み込むことも今回、ないのですけれども、 そんなプログラムでも使用可能でしょうか? どうか回答をお願いいたします。

noname#77845
noname#77845
回答No.1

「できないんです、」 だけでは、何も判りません。 どういうエラーが表示されたのですか? できれば、そんなに長くないと思いますので、ソースを補足してください。

matsuhira
質問者

補足

こんばんわ、matsuhiraです。 説明不足ですみません。わからないですよね、あれじゃ。 ソースですけどこんな感じです。 int x=0, i=0, cnt=0; while(x!=0){ scanf("%d",&suji[i]); cnt++; if(suji[i]=='x'){ x=1; } } for(i=0; i<cnt; i++){ printf("%d\n"suji[i]); } これがソースです。 うまく表示できてませんが、勘弁してくださいね。 質問があれば何なりとお申し付けください。 エラーですけど、無限ループになっちゃいますね。 どう解決すればいいんでしょうか?

関連するQ&A