質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

3392閲覧

C言語においてファイルから一列ずつ文字列を読み取り、特定の箇所を数値化する方法

plzcarryme

総合スコア3

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/06/20 10:34

前提・実現したいこと

以下に示すテキストファイルから最後の三桁の数字だけを取り出す方法についてお尋ねします。
文字列として取り出し表示することはできたのですが数値に変換する際にエラーが起こってしまいます。

解決に向けてお力添えをお願いします。

該当のテキストコード

2014/1/1,0:00,128 2014/1/1,1:00,131 2014/1/1,2:00,255 2014/1/1,3:00,245 2014/1/1,4:00,239 2014/1/1,5:00,239 2014/1/1,6:00,247 2014/1/1,7:00,260 2014/1/1,8:00,271

該当のソースコード

#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX 100 int main(void) { char s[MAX]; char *p; int m; FILE *fp=fopen("year-2014.csv","r"); while(fgets(s,MAX, fp)!=NULL){ p=strtok(s,","); for(int j=0;j<2;j++){ p=strtok(NULL,","); m=strtol("p",NULL,10); } printf("%d",m); /*printf("%s",p); とすると三桁の数字が文字列として出力されました。*/ } fclose(fp); return 0; }

試したこと

whileを用いて文字列を区切る方法もあると思いますが最後の数字を取り出すことに尽力していたら最終的にforを用いていました。
区切り文字を厳密に設定する必要があるかもしれません。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anndonut

2020/06/20 12:35

もう解決済みになったのと質問者さんがteratailの質問者さんの平均よりも高い理解力の人だったので不要になった針小棒大な回答をQiita記事で投稿したのでよろしければそちらもお読みいただければと思います。 https://qiita.com/HaruoWakakusa/items/6272b0b8b8afdc7793fe
plzcarryme

2020/06/20 16:42

ありがとうございます。 参考にさせてもらいます。
guest

回答4

0

パっと目に付いたところだけですが、「"p"」のダブルクォーテーションはいらないのではないでしょうか

m=strtol("p",NULL,10);

m=strtol(p,NULL,10);

投稿2020/06/20 10:42

編集2020/06/20 10:43
hidezzz

総合スコア1248

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

c

1//m=strtol("p",NULL,10); <-削除して 2sscanf(p,"%d",&m); //<-書き換え

キーボードの代わりにpを入力としたscanfのような感じです。

あと、

printf("%d\n",m); //<-改行する

参考 http://www.c-tipsref.com/reference/stdio/sscanf.html

投稿2020/06/20 10:50

ohys

総合スコア147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

strtolの引数にp(変数)ではなく"p"(文字列リテラル)を渡しているのを直してみてください。

投稿2020/06/20 10:41

kuuote

総合スコア705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

  1. ファイルから1行読み込む
  2. コンマ区切りで文字列を分割して複数の文字列を得る
  3. 該当の場所の文字列を数値変換

この手順でどうぞ

投稿2020/06/20 10:39

y_waiwai

総合スコア88024

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問