• 締切済み

数字の読み取り

現在Cでプログラムを作成しています。 プログラムはテキストファイルから最初の列の数字N(最大で50)を読み取り、テキストファイルがN+1列、各列N文字のフォーマットになっているかを読み取ります。 例) 4(この場合4文字の単語が4個、4列に表示されます) test text temp file この場合は問題ありませんが、 一列目の数値がマイナスだったり、1k2など数字以外を含んでいる場合、 または上の例で言うと4文字ではない単語が混ざっていたり、単語の数が4個ではなかったりした場合にエラーメッセージを出力するようにしたいです。 isdigitを使って一列目が数字かどうかは判断できますが、それが二桁だとどうすればいいのか分かりません。 また数字だと分かっても、その数字を実際に数値として活用するにはどうすればいいのでしょうか?

みんなの回答

  • chie65535
  • ベストアンサー率43% (8522/19371)
回答No.4

 int N;  char crlf;  if (fscanf(fp,"%d",&N) != 1) {   // 数字として読めない文字があったか、読める物がもう無かった場合の処理  } else if (fscanf(fp,"%c",&crlf) != 1) {   // 読める物がもう無かった場合の処理  } else if (crlf != '\n') {   // 数字のあとに改行が無かった場合の処理  } else if (N <= 0) {   // Nがマイナスか0だった場合の処理  } else {   // 正常な数字を読んだ場合の処理  }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

あ~, strto系を使うまでもなく最初から scanf すればよかったんだ.

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

>最初の列の数字 横方向は、一般に「行」です。列は縦方向です。 >テキストファイルがN+1列、各列N文字 例示のデータは、この条件を満たしていないのではありませんか? 各列(行)N文字になっていないですね。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

1行目が数字かどうか, ということなら strtol を使えば「それなりに」解決できると思う.

関連するQ&A

  • charを使わずに4桁の数字以外を入力したらエラーを表示したいです

    http://oshiete1.goo.ne.jp/qa4515709.html 上記の質問の続きとなります。 C言語で4桁の数字を入力させ、4桁の数字以外が入力されたらエラーを表示し、 4桁の数字が入力されたら、各位の数についていくつかの計算を行いたいです。 回答者の方のアドバイスから、文字列として入力し、字数をstrlenで、各桁の数をisdigitで判別するという方法を教えていただき、 4桁の数字以外が入力されたらエラーを表示することはできましたが、そうすると今度は計算がうまくいかなくなってしまいました。 例えば文字列としてscanf("%s",a);のようにして「1234」という文字列を入力し、これを「1234」という数値として扱うことはできませんか? または、strlen,isdigitを使わずに数値が4桁の整数であるかどうかを判別することはできませんか? もし良い方法をご存知の方いましたら、解説をお願いします。

  • エクセルで、頭に0をつけて数字の桁を揃える方法

    エクセルで、必ず5桁の数字を入れる列があるとします。 ところが、数値データとして最初に作っているので、0が頭になく桁が足りない場合があります。 任意文字として5桁の数字にしたいのですが、 何かいい方法はありませんでしょうか? 例) A列 A列 50      00050 1000  ⇒  01000 11111    11111 どうぞよろしくお願いいたします。

  • 数字と文字列から数字のみ取り出したい

    下記のような数字と文字の組み合わさった文字列から数字のみを取り出したいのですが、 基準となる文字もなく、数字の桁、文字数もバラバラで、さらに文字部分にも数字が 入っていて調べた数式が使えず困っています。 (例1)109778大倉山マンション第3⇒109778 を取り出したい (例2)13482マックハイム綱島第10 ⇒ 13482 を取り出したい (例3)12896ハイム大倉山⇒12896 を取り出したい (例4)1198藤和シティコープ大倉山太尾町A棟⇒1198を取り出したい 調べた数式=LEFT(A1,LEN(A1)*10-SUM(LEN(SUBSTITUTE(A1,{0,1,2,3,4,5,6,7,8,9},)))) 上記の数式だと(例1)(例2)の場合、建物名の数値を反映してしまい数値のみ取り出せません。 数値部分はみたところ4~6桁でした。 何か良い数式がありましたら、ご教授願います。

  • 正規表現で全角数字を半角数字に置換する方法は?

    いつもお世話になっております。 テキスト内の全角数字5桁のみを該当の半角数字5桁に置換する方法を探しています。 OS:Win テキストエディタ:sakuraエディタ、秀丸 例) ---------------------------------------- あいうえお01234かきくけこ99さしすせそ ↓ あいうえお01234かきくけこ99さしすせそ ---------------------------------------- 正規表現で行えばいいと思い、置換文字列を  [0-9][0-9][0-9][0-9][0-9] あるいは  [0-9]{5} にしましたが、置換後の文字列が分かりません。 試しに検索で上記の文字列を試すと、該当箇所がマークされるので、 置換前の文字列は合っています。 置換後の文字列をご教授願えますでしょうか。 ※テキストエディタで無理ならプログラム組みます。 VBScriptを考えていますが、他に良い言語があれば併せて教えてください。

  • PHPプログラム ファイルから数字を抽出

    こんにちは。PHPプログラム初心者です。 今回、Twitterのツイートを取得して、その文章の単語ごとにネガティブかポジティブかを値をつけてくれている辞書を利用して、ツイートのネガポジを測ろうと思っています。 ここでお聞きしたいのが、入力文字に対して、テキストファイルの文字が一致すればその文字の横にある数字を出力して、文章の単語すべて足しあわせて、文章全体の数値を出したいのです。 テキストファイルの内容は -------------------------- 優れる すぐれる 1 良い よい 0.999995 喜ぶ よろこぶ 0.999979 褒める ほめる 0.999979 めでたい めでたい 0.999645 ・・・ --------------------------- といった感じで、-1~1の値が単語ごとに割り振られていて、 数字と単語の間には半角スペースが2つあります。 このテキストファイルを読み込んで、 入力文字(単語ごとに分けられています)に対して、 テキストファイルを検索して「すぐれる」があればその右の1を出力して、 それを繰り返して足しあわせて、文章全体での数値を出して、 全体で負の数字が出ればネガティブ!みたいなことをしたいです。 説明が下手ですみません。 わかりにくい表現があれば追記いたします。 すこしでもヒントがありましたらどんどん回答くだされば嬉しいです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 3桁のカウンター表示

    Visual C++初心者です。 000~999までのカウンター表示ができるプログラムがつくりたいのですが 1秒間ごとに1カウントアップします。999の次は000に戻ります。 数値が1桁、もしくは2桁の場合、頭に0を付けて3桁にしなければいけません。 条件として文字列は必ず使わなければいけません。 ltoa(count, temp, 10); if (temp[2] == '\0' && temp[1] == '\0')  /*数値が1桁の場合*/ {   temp[2] = temp[0];   temp[1] = '0';   temp[0] = '0'; } if (temp[2] == '\0' && temp[1] != '\0')  /*数値が2桁の場合*/ {   temp[2] = temp[1];   temp[1] = temp[0];   temp[0] = '0'; } こんな感じのを考えましたが上手くいきませんでした。 0~999までのカウントアップ表示はできております。あとは3桁にするだけなのですが。 よろしくお願いします。

  • ファイルの読み取りについて

    現在C言語の勉強中ですが、 テキストファイルがあったとします。 ファイル内容 abc ,111 def ,222 ghi ,333 っとあったとします。 プログラムで入力した数値で、どの行番号のどのブロックの 文字列を取得し表示したいのですが、行とブロックの指定方法が わからなくて困っています。 ご回答よろしくお願いします。

  • PHP ファイル読み取りについて。

    こんにちは。PHPプログラム初心者です。 ファイルから数字を読み取って計算するにはどういうプログラムにすればよいでしょうか。 やりたいのは、テキストファイルを読み込みます。 そのテキストファイルの中には、 --------- 文字 123 あいう 456 もじ 7890 ・・・ --------- といった感じで、文字と数字が並んで入力されています。 文字の中にスペースはなく、文字と数字の間にはスペースがあります。 ここで、ユーザの入力に対して、 「もじ」があればファイルの「もじ」のすぐ隣の「7890」を出力するようにしたいのです。 これを繰り返し、最終的には、出力した数字を合計する作業をしたいです。 説明不足でわかりにくいかもしれませんが、 ヒントだけでも結構ですので、なにかありましたらよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Excel セル内の文字列の数字の桁数を増す方法について

    エクセル2000にて、セル内に4桁、6桁、7桁、8桁の文字列の数字が、別々に入っているとき、文字列の数字が7桁の時のみ 0 を書き加えて、8桁にする方法を教えてください。 例)A1 4001 33000018 6200095 →06200095 6100092 →06100092 4176 200025 6100061

  • EXCEL VBA で列の数字のみを修正したい

    EXCEL VBA で列の数字のみを修正したいのですが 内容としては (1)カッコ内文字はそのまま維持 (2)添付資料のN001から始まっているある機械加工プログラムに   N052,N053を挿入しプログラム内容はそのまま変更なく使用 今まで数値を一つずつ変更していて非常に大変で困っています。 ここでN001から始まる数値のみ順番にマクロで変換したいのですが おすすめのコードを教えてください。 (※A列に記載されているとして)

専門家に質問してみよう