前提・実現したいこと
今年の4月から初めてプログラミング言語に触れた初心者のため、初歩的なことがわかっていないと思います。ご了承ください。
現在、C言語を使って「テキストファイルに書かれた数字を一文字ずつ数値化し、昇順にソートする」というプログラムを組もうと考えています。
ファイルの中身を読み込むというところまではできたのですが、
「atoiを使って数字を数値に変換し、配列に格納する」という部分がうまくいきません。
多分初歩的なことが理解できていないためだと思うのですが、エラーコードについて調べてみても、どう直せばいいかわかりません。
具体的なコードの例を教えていただけると幸いです。
できればatoiを使用したコードの例だと嬉しいです。
使用ツール:visual studio community 2015
ファイル名:C:\temp\test.txt
テキストファイルの中身:9876543210
該当のソースコード
C
1while (fgetc(fp) != EOF) {//ファイルの最後じゃないとき 2 for (i = 0; i < 11; i++) { 3 num[i] = atoi(str[i]); 4 printf("%d", num[i]); 5 }
発生している問題・エラーメッセージ
エラーメッセージ 型"char"の引数は型"const char*"のパラメーターと互換性がありません。
試したこと
文字セットを変えてみる、char[]型からint[]型仕様への書き直しなどの方法が見つかったのですが、知識が足りず、理解には至りませんでした。
ご教授のほどよろしくお願いいたします。
以下はコードの全体です。
//コード全体 #include <stdio.h> //FILE構造体, fopen, fclose, fgetc、printfで使用 #include <stdlib.h>//atoiで使用 int main(void) { //変数の設定 FILE *fp; //ファイル構造体でポインタ変数fpを設定 const char *file = "C:\temp\test.txt";//アドレスを保存 char str[11];//ファイルの値を入れる int num[11];//str[]の値を入れる int i, j, k;//atoi、ソートで使用 //ファイルの読み込み fopen_s(&fp, file, "r") != NULL; //fopen_s(ポインタ変数のアドレスを指定,開くファイル名,rはテキストファイルの読み込み) //ファイルが存在しない場合のエラー処理 if (fp == NULL) { printf("ファイルが開けません\n"); return -1; //ファイルが存在するときの処理 while (fgetc(fp) != EOF) {//ファイルの最後じゃないとき for (i = 0; i < 11; i++) { num[i] = atoi(str[i]); printf("%d", num[i]); } } //数値を昇順にソート for (i = 0; i < 11; i++) { for (j = i + 1; j < 10; ++j) if (num[i] > num[j]) {// k = num[i];// num[i] = num[j]; num[j] = k; } } //昇順ソートした数字を出力 for (i = 0; i < 10; i++) { printf("%d", num[i]); } getchar(); fclose(fp); //ファイルを閉じる return 0; } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。