• ベストアンサー

期待する文字列

KojiSの回答

  • KojiS
  • ベストアンサー率46% (145/312)
回答No.4

何となく設計せずにいきなり書いたコードに見えます。 まずアルゴリズムを考えて、設計をしましょう。 あと、これワーニングは出ていませんか? ワーニングが出ていると思うのですが、そのワーニングの原因を調べましょう。もし出ていないなら、ワーニングレベルが低いと思われるので、ワーニングレベルは常に最高にしておきましょう。 これは「数字のみなら実行可能」と書かれていますが、正常に動作しているでしょうか?見たところ正常に動作しないと思われます。 例えば、 char *expand_memory(char *buff, int *rem) ですが、バッファサイズが変わりません。ですので、意図する動作がつかめません。 getchar()の使い方を間違っていませんか? また、全体的にエラーチェックがほとんどありません。 その他もいろいろあるのですが、コーディングスタイルには触れません。が、言わせてもらうと、呼び出された関数の内部でエラー表示はやめた方が良いと思います。標準関数のように、エラーを返して呼出元でエラー表示しましょう。また、必要のない「ポインタの引きずり回し」はやめた方が良いでしょう。データの流れがわかりにくくなります。 もう一度全体をきちんと設計し直した方がよいかと思います。

nagaruru
質問者

お礼

そうですね、設計も何もなく処理の順序をただ書いただけだと 思いました。 ポインタも、ループを脱出するためのもので そこまでの関数には関係ないのに引きずってるなとは思っていました。 kojiSさんのご指摘参考になりました。ありがとうございます。

関連するQ&A

  • 整数を文字列として認識したい

    整数を文字列として認識したいんですが、可能なのでしょうか? 例えば、i=12470というint型の整数があるとして、1万の位の数1や、十の位の数7だけを取り出したいんです。 しかし、この際、1万の位の数1をi/10000、十の位の数7を(i%100)/10などというようにしては取り出したくないんです。 ややこしい質問ですが、よろしくお願いします。 というのも、整数を文字列として認識する目的は、int型として送られてきたデータが本当に整数なのかをチェックするためだからです。 初心者なので合っているか分かりませんが、整数を文字列として認識できれば、isdigit関数を使うことで、データが本当に整数なのかをチェックすることができるのかなあと考えているんですが・・・ もし、私の考えが間違っていたり、他に良い方法があったら是非教えて欲しいと思います。

  • ”123456”といった整数を文字列に変換、その後、文字列を1文字ごとに整数に変換 

    忙しい中失礼します。 http://oshiete1.goo.ne.jp/qa3424254.htmlでも質問させて頂いたものですが、 今、回答してくださった方の意見を参考に以下の過程をこなそうとしています。 1.整数入力 →scanf関数を使用し、"123456"と入力します。 2.整数を文字列に変換 → printf("Write the SIN: \n");   scanf("%d", &fnum);   printf("%c\n",fnum); で、"123456"と数値を入力しても”123456”という値が返されず、@となってしまいます。 どうすれば入力した数値が文字列として返ってくるのでしょうか? どんな文・関数を使用すれば数字を文字列として使用することが可能になるのでしょうか? 今のところ習っている文はif else, swith case, while for,do whileで、 getcharやstr?(string)という関数は習っていません。なので、どうプログラムを書けばいいのか??さっぱりなのです。 でもgetcharやstr?(string)という関数を使用するしか方法はないものなのでしょうか?  また、それから 3.文字列を1文字ごとに整数に変換  にする場合、どんな文・関数を使用すれば、1文字”ごと”に整数に変換できるのでしょうか? ごめんなさい、分からないのです。プログラム文、ヒントもしくは参考になるページ等があれば教えて下さい。 よろしくお願いします。 <使用環境:フリーソフト(Borland?)C ANSI C>

  • 文字列の中から1~5桁の数字を抜き出したい

    ある命令プログラムを作っているのですが、文字列の中に命令語を書いてその後に続く数字を抜き出したいのですがうまくいきません ソースを見ていただきたいのですが @ke の命令語の後で1~5桁の数字を記載しているのですが 数字の部分を文字から数字に変えたいのです。 その後 @ke 数字 を正式な命令文として扱いたいのですがソースを見ていただけるとわかると思いますが問題があります。 ・文字をatoiで数字に変換できない(キャスト演算子を変えてもだめだった) ・ソースのプログラムの書き方ではやたらと長々しくなってしまう。 どのようにしたら問題が解決できますか? ----以下ソース---- #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> int main(){ char kei[100]="abc@ke 4567def@ke 789"; int i=0; int g=NULL; while(i<15){ if(kei[i]=='@'){ i++; if(strnicmp(&kei[i],"ke ",3)==0){ i+=3; //後に続く数字を抜き出して処理したい if(isdigit(kei[i])){ if(isdigit(kei[i+1])){ if(isdigit(kei[i+2])){ //・・・・以下全部で5桁分の数字を判定していく けど正直こんなややこしい方法をとらなくてもスマートにできるはず } else{ g=(atoi(kei[i])) * 10 +atoi(kei[i]); //型名が違うからatoiに入らないといわれる } } else{ g=atoi(kei[i]); //型名が違うからatoiに入らないといわれる } } else{ printf("\n命令の仕方が間違っています\n"); } } } else{ printf("%c",kei[i]); i++; } } return 0; }

  • ヘッダーファイル"jctype"について

    昨夜はお世話になりました。 今日はCのヘッダファイル"jctype"についてです。 例の文字列検索プログラム作成中に、 "iskanji"関数という存在に気づきました。 関数名から日本語環境用と思われますが、 jctypeがBorland C++ Compiler には存在しないようですので、 どなたかその関数を利用する方法を教えてください。 宜しくお願いします。

  • 文字列を数字型に変換したい

    いつもお世話になっております。 eclipseというツールでC言語のプログラムを触っているのですが、 文字列の数字を数値型に変換して掛け算をしたいのですが、 型変換の関数はありますでしょうか??

  • 大文字の文字列→小文字の文字列

    C言語初心者です。 ある演習問題をやっていて詰まっています。 自分で入力した大文字の文字列を小文字にするプログラムを作るという問題なのですが、↓の条件があり、こんがらがってしまいました。 ・入力した文字列に小文字が含まれていたら、エラーと表示して再び入力を促し、0を入力するとプログラム終了という流れにする。 ・ポインタ変数を使う。 ・continue文を使う。 ・標準ライブラリ関数は使わない。 です。 ・continue文というのがよくわからない。 ・宣言した関数でどの処理をすればいいのかわからない。 ・大文字を小文字にするというプログラムがわからない。 (アスキーコードをどう使うのか) でつまっています。 どなたかアドバイス・解説・模範解答・指摘などしていただけないでしょうか。 よろしくお願い致します。

  • 16表記の文字列を数字に直したい(C/C++標準関数)

    16表記の文字列を数字に直したい(C/C++標準関数) 例えば、"FF”な255 or -127という風に16表記の文字列を数字に直すC/C++の標準関数はありますか? なければ、どのようなやり方で行っていますか? VxWorksのprogramを開発しようとしているのですが、どんな標準関数が使えるのか、 直接契約していないので分かりません。 組み込み製品の説明書にはC/C++の仕様の説明書がないですね。 VxWorksでsupport されている標準関数はどんなものがあるかもご存知の方教えてください。 シリアル通信のプログラムで伝聞がASCIIで書かれていて、数値は10進だったり、16進だったりします。

  • 文字列がNULLか空文字列かの判定

    Visual C++で、Cのプログラムを作成しているものです。(OS:WinNT 4.0) 文字列の扱いについて、質問します。 関数 int func(char *str) があると仮定します。 パラメータとして、strは以下のような状態あるとします。 (strは関数が呼ばれる前にcalloc()で領域確保済み)  シンボル名 値  str      0x00000001 "" 上記の状態で、strがNULLか空文字列("")であることを条件式にしたいのですが、str == NULL は偽となり、strcmp(str, "") を使用すると異常終了します。 どうしたらよいのでしょうか。アドバイスをお願いします。

  • 文字列の比較

    現在Cでプログラムをつくっているのですが いきずまってしまいました。 1.テキストファイルを読み込む 2.書き込みファイルを開く 3.読み込んだデータを一行読み込んで   その行の特定の文字列があれば、   特定の文字列のみ取り出し、   書き込みファイルに書く。    4.次以降の行も同じ処理をする。    5.読み込み、書き込みファイルを閉じる。 と、こんな感じのプログラムなのですが、 3の特定の文字列をどのように取り出せばいいのかわかりません。 取り出したいのが数字ならば、if文でできるのですが 文字列の場合は、どうなんでしょうか。 例えば、「MOJIRETU11」という取り出したいとき 数字と同じようにIF文を使用することは、できるのでしょうか。

  • char*型の文字列を表示させたい。

    char*型の文字列を表示させたい。 char*型の文字列をウィンドウに表示させるプログラムを作っているのですが、 調べても分からなかったので、質問させていただきます。 コンパイラはBorland C++で、プラットフォームはウィンドウズです。 Textoutのようにウィンドウに出力させたいのですが、うまくいきません。 うまく行かないと言うのは、C言語でのプログラムの書き方が分からないと言う事です。 ある文字列をファイルから読み込んで、ウィンドウに表示させると言うプログラムを作っています。 http://wisdom.sakura.ne.jp/system/winapi/win32/win15.html このような感じにしたいのですが…。宜しくお願い致します。 ちなみにこの質問をさせていただいたものです。 http://oshiete1.goo.ne.jp/qa3342727.html