C・C++・C#
- Unicodeのテキストファイルを読みたい
Unicode(UTF-8)で作成されたテキストファイルを読み、Shift-JISに変換しメモコントロールに表示したいと思っています。 以下のコードで実行したのですが、文字化けになり正常に表示できません。 開発環境はC++Builder2010です。 char sjis[300]; wchar_t buf[300]; size_t n; setlocale(LC_ALL,"japanese"); while(fgetws(buf,300,fp31) != NULL){ n = wcstombs(sjis,buf,300); Memo1->Lines->Add(sjis); } fgetws関数が問題なのか、wcstombs関数が問題なのか、不明なのです。 アドバイスよろしくお願いいたします。 ちなみに読込んだテキストファイルは、国税局のインボイス登録者データです。 https://www.invoice-kohyo.nta.go.jp/download/index.html
- MSB6011が発生してビルドが進まない
visual studio 2022 でVC++ のビルドをしたところ以下のエラーが発生しました。前に進めなくてこまっています。回答お待ちしております。 エラーメッセ―ジ ・要素 <SubSystem> の値 "Windows(/SUBSYSTEM:CONSOLE)" は無効です。プロジェクト名 下記ファイル ・MSB6011 Link タスクに無効なパラメーターが渡されました。プロジェクト名 下記ファイル ファイル Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets <Link SubSystem ="%(Link.SubSystem)" > <プロジェクト>→<構成プロパティ>→<C/C++>→<プリプロセッサ定義> WIN32;NDEBUG;%_Windows;(PreprocessorDefinitions) <プロジェクト>→<構成プロパティ>→<リンカー>→<システム> Windows(/SUBSYSTEM:WINDOWS よろしくお願いいたします。
- unity、C#アプリ制作
unity初心者です。 一台の端末を順に回して遊ぶオリジナルのボードゲームアプリを作っています。 シーン①乱数を表示するオブジェクトを生成 シーン②プレイヤーの入力した内容を表示 クリア条件を満たすまで、シーン①とシーン②を行ったり来たりする(シーン①の乱数は変える)仕様が上手くできません。 一応、シーン②からシーン①に戻る自体は出来たのですが、 シーン①で生成する乱数を表示するオブジェクトは、新しい乱数を表示させたいところが出来てなく、最初に生成した乱数と同じ数字が表示されます。 どうやって修正するかご教授お願いします。
- C言語 テキスト問題
問題文の表示、回答の入力、答えの表示が行えるようにせよ。 以下に、問題文のファイルと答えのファイルに格納されている文字列を示す。 ・問題文(nazonazo_mondai): 自分の家をおんぶしている虫は何? ケガをしたときにつける毒は何? 銀色のチャックを大急ぎで集めている生き物は何? スポーツで破りたいものといえば何? 草が古くなったよ。どんな味がした? ・答え(nazonazo_kotae): カタツムリ 消毒 イソギンチャク 記録 苦い味 入力される値 カタツムリ 消毒 イソギンチャク 記録 苦い味 期待される出力値 第01問 ===================== 自分の家をおんぶしている虫は何? 第01問の答え: カタツムリ 第02問 ===================== ケガをしたときにつける毒は何? 第02問の答え: 消毒 第03問 ===================== 銀色のチャックを大急ぎで集めている生き物は何? 第03問の答え: イソギンチャク 第04問 ===================== スポーツで破りたいものといえば何? 第04問の答え: 記録 第05問 ===================== 草が古くなったよ。どんな味がした? 第05問の答え: 苦い味 制約 ・問題文のファイル名、答えのファイル名は以下を用いること。 問題文:nazonazo_mondai 答え:nazonazo_kotae ・それぞれのファイルを読み込めなかった場合の処理として、以下を出力しプログラムを終了する。 問題ファイルの読み込みに失敗しました。プログラムを終了します。 回答ファイルの読み込みに失敗しました。プログラムを終了します。 ・以下の構造体を用いてなぞなぞの問題と答えを読み込むこと。 構造体「MONDAI」を定義して、 「MONDAI」の構造体の中には以下のメンバを定義してください。 ただし、typedefを用いること。 【メンバ名】 【データ型】 【説明】 question 文字配列[要素数:256] 問題文を格納する変数 answer 文字配列[要素数:50] 答えを格納する変数 kaitou 文字配列[要素数:50] 入力した回答を格納する変数 ・fgets関数を使ってファイル内の文を読み込む際に、配列の大きさを引数として渡す必要がある。 その際にsizeof関数を用いること。 ・問題文の出力と答えの出力にはそれぞれ以下を使用すること 第%02d問 ===================== 第%02d問の答え: ポイント ・構造体のメンバ変数にkaitouを追加しています。ここに入力内容を格納すること。 ・問題文の表示、回答の入力、答えの表示を5回繰り返すようにする。 ・答えで表示する文字列は、nazonazo_kotaeのファイルから読み込んだ文字列を出力すること。 ※ kaitouに格納された文字列ではないことに注意してください。 サンプルケース1 入力値 カタツムリ 消毒 イソギンチャク 記録 苦い味 期待される出力値 第01問 ===================== 自分の家をおんぶしている虫は何? 第01問の答え:カタツムリ 第02問 ===================== ケガをしたときにつける毒は何? 第02問の答え:消毒 第03問 ===================== 銀色のチャックを大急ぎで集めている生き物は何? 第03問の答え:イソギンチャク 第04問 ===================== スポーツで破りたいものといえば何? 第04問の答え:記録 第05問 ===================== 草が古くなったよ。どんな味がした? 第05問の答え:苦い味
- C言語 テキスト問題
なぞなぞの問題文が格納されているファイルにおける1行目の問題文と答えが格納されているファイルにおける1行目の答えを読み込む処理を実装せよ。また、読み込んだ問題文と答えをそれぞれ出力せよ。 以下に、問題文のファイルと答えのファイルに格納されている文字列を示す。 ・問題文(nazonazo_mondai): 自分の家をおんぶしている虫は何? ケガをしたときにつける毒は何? 銀色のチャックを大急ぎで集めている生き物は何? スポーツで破りたいものといえば何? 草が古くなったよ。どんな味がした? ・答え(nazonazo_kotae): カタツムリ 消毒 イソギンチャク 記録 苦い味 入力される値 なし 期待される出力値 自分の家をおんぶしている虫は何? カタツムリ 制約 ・問題文のファイル名、答えのファイル名は以下を用いること。 問題文:nazonazo_mondai 答え:nazonazo_kotae ・それぞれのファイルを読み込めなかった場合の処理として、以下を出力しプログラムを終了する。 問題ファイルの読み込みに失敗しました。プログラムを終了します。 回答ファイルの読み込みに失敗しました。プログラムを終了します。 ・問題文と答えを読み込む配列は以下を用いること。 char question[256]; char answer[32]; ・fgets関数を使ってファイル内の文を読み込む際に、配列の大きさを引数として渡す必要がある。 その際にsizeof関数を用いること。 ポイント ・fgets関数、sizeof関数の使い方は以下のサイトを参考にすると良い サンプルケース1 入力値 なし 期待される出力値 自分の家をおんぶしている虫は何? カタツムリ
- C言語 if文でscanf関数
C言語のif文でscanf関数を使って、~と入力されたら・・・(~は文字列)のようなプログラムを作りたいです。どうすれば良いでしょうか?(簡単にお願いします・・・)
- ベストアンサー
- C・C++・C#
- HIRUNANDESU
- 回答数2
- Arduino プログラミングのエラーについて
現在、Arduino、4桁7セグメントLED(カソードコモン)、タクトスイッチ3つで、3人クイズ対決で利用する得点加算機を作成しています。 プログラムで、下記のようなエラーが出てしまいます。 invalid types 'int[int]' for array subscript このエラーに対して、何か解決策があればご教授お願い致します。 下記にプログラムを載せます。 const int first_BUTTON = 0; //プレイヤー1の得点ボタン const int second_BUTTON = 1; //プレイヤー2の得点ボタン const int third_BUTTON = 4; //プレイヤー3の得点ボタン const int anode_a = 12; //アノードに接続するArduinoのピン const int anode_b = 8; const int anode_c = 5; const int anode_d = 3; const int anode_e = 2; const int anode_f = 11; const int anode_g = 6; const int cathode_first = 7; // カソードに接続するArduinoのピン const int cathode_second = 9; const int cathode_third = 10; int val_1= 0; int val_2= 0; int val_3= 0; int old_val_1 = 0; int old_val_2 = 0; int old_val_3 = 0; // LEDの状態(0ならオフ、1ならオン) int state_first=0; int state_second=0; int state_third=0; int w; int N; // setup() は、最初に一度だけ実行される void setup () { // ピンを出力モードに設定する pinMode(first_BUTTON, INPUT); pinMode(second_BUTTON, INPUT); pinMode(third_BUTTON, INPUT); pinMode(anode_a, OUTPUT); pinMode(anode_b, OUTPUT); pinMode(anode_c, OUTPUT); pinMode(anode_d, OUTPUT); pinMode(anode_e, OUTPUT); pinMode(anode_f, OUTPUT); pinMode(anode_g, OUTPUT); pinMode(cathode_first, OUTPUT); pinMode(cathode_second, OUTPUT); pinMode(cathode_third, OUTPUT); } //LEDレイアウトを定義 boolean Num_Array[11][7]={ {1,1,1,1,1,1,0},//0 {0,1,1,0,0,0,0},//1 {1,1,0,1,1,0,1},//2 {1,1,1,1,0,0,1},//3 {0,1,1,0,0,1,1},//4 {1,0,1,1,0,1,1},//5 {1,0,1,1,1,1,1},//6 {1,1,1,0,0,1,0},//7 {1,1,1,1,1,1,1},//8 {1,1,1,1,0,1,1},//9 {0,0,0,0,0,0,0} //space }; //LED表示関数を定義 void NumPrint (int Number){ for (int w=0; w<=6; w++){ digitalWrite(w+1,Num_Array[Number][w]); } } boolean Led_Array[3][3]={ {1,0,0,}, //LED1 {0,1,0}, //LED2 {0,0,1} //LED3 }; void Led_Active(int Number){ for(w=0;w<=2;w++){ digitalWrite(w+11,Led_Array[Number][w]); } } // loop() は、setup ()実行後、無限に実行される void loop(){ for(int i=0;i<=2;i++){ NumPrint(N[i]) } Led_Active(i); delay(5); } val_1 = digitalRead(first_BUTTON); NumPrint(state_first); //変化があるかどうかチェック if((val_1 == HIGH) && (old_val_1 == LOW)) { state_first = (state_first+1) % 10; NumPrint(state_first); delay(300); } delay(100); old_val_1 = val_1; val_2 = digitalRead(second_BUTTON); NumPrint(state_second); //変化があるかどうかチェック if((val_2 == HIGH) && (old_val_2 == LOW)) { state_second = (state_second+1) % 10; NumPrint(state_second); delay(300); } delay(100); old_val_2 = val_2; val_3 = digitalRead(third_BUTTON); NumPrint(state_third); //変化があるかどうかチェック if((val_3 == HIGH) && (old_val_3 == LOW)) { state_third = (state_third+1) % 10; NumPrint(state_third); delay(300); } delay(100); old_val_3 = val_3; }
- 締切済み
- C・C++・C#
- kingindouokwave
- 回答数1
- C言語のポインタにの動作について
以下のコードで、DelHalfSpc() において引数 str は str++ でカウントされ、ループを抜けた時点では文字列の末尾を指しているはずですが、なぜ呼び出し側の main()の char str[] には正しい値が入るのでしょうか? char *DelHalfSpc(char *str) { //char *dmy = str; → char * という型の変数 dmy の宣言 char *dmy, *Res; Res = dmy = str; // Res は常に先頭アドレスを指す while (*str != '\0') { if ( *str != ' ' ) { *dmy = *str; dmy++; } str++; } //ループを抜けたこの時点で str は文字列の末尾を指しているはず *dmy = '\0'; return Res; //ここを return str とするとヌル文字列を返す } int main(void) { char str[] = " 1 23 4 5"; printf("空白削除前:\"%s\"\n", str); printf("空白削除後:\"%s\"\n", DelHalfSpc(str)); printf("str も変化:\"%s\"\n", str); //なぜ正しい結果が表示されるのか? return 0; } 【結果】 ----------------------- 空白削除前:" 1 23 4 5" 空白削除後:"12345" str も変化:"12345"
- Cプログラムの全関数にプログラムを自動挿入したい
C言語で作成したプログラムの全ての関数に対して、各関数のオート変数の宣言の前(関数の先頭)に特定のオート変数の宣言(例: int a=0xff)を自動で挿入したいです。 関数の数が多いので手作業以外の方法で良い方法はないでしょうか?
- ベストアンサー
- C・C++・C#
- minoru02141978
- 回答数3
- c# ツェラーの公式を利用した計算方法
利用言語はc# ソフトはvisual studio2022を利用しています。 年・月・日をそれぞれ入力し、ツェラーの公式を利用して曜日を出したいのですがやり方が分からず困っています。 分かる方がいらっしゃいましたらお力を貸していただけましたら幸いです。 曜日の判定をする部分は以下で実現したいです。 Console.WriteLine("{0}曜日", g[dayofweek]);
- C#でのSQLへのアクセスについて
SQL Serverのテーブルをコンソール上に表示する為のコードを書いたのですが SqlConnection SqlCommand SqlDataReader に対してエラーが出しまい、修正方法が分からず、どなたか教えて頂けないでしょうか? 【ソースコード】 using System; using System.Configuration; using System.Data; using System.Data.SqlClient; using Microsoft.Data.SqlClient; static void Main(string[] args) { string connectionString = "Data Source=○○;Initial Catalog=○○;User ID=○○;Password=○○;"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlCommand command = new SqlCommand("SELECT * FROM [○○]", connection)) using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine(reader["column1"]); Console.WriteLine(reader["column2"]); } } } }
- 締切済み
- C・C++・C#
- asai555666
- 回答数3
- C言語のポインタと配列について
下のコードについて2つ質問があります。 (1) char *p; p = str; ならわかるのですが、なぜ型が違う char *p = str; のような代入がOKなのでしょうか。文字列をコピーするときの *p = *str; と比較して、とても違和感があります。 str は引数で受けた文字列の先頭アドレス。 (2) char *str; str = " 1 23 4 5"; と char str[] = " 1 23 4 5"; との違いがよくわかりません。 #include <stdio.h> #include <ctype.h> void TrimSpace(char *str) { char *p = str; // (1)型が違うのになぜこんな代入をするのか? while (*str != '\0') { if ( !isspace(*str) ) { *p = *str; // この代入は自然 p++; } str++; } *p = '\0'; } int main(void) { //char *str; //str = " 1 23 4 5"; (2)これでは空白を詰めた後の文字列が表示されないのはなぜか? char str[] = " 1 23 4 5"; //これで OK printf("空白を詰める前:\"%s\"\n", str); TrimSpace(str); printf("空白を詰めた後:\"%s\"\n", str); return 0; }
- C言語 関数化の仕方について
こんにちは。プログラムの関数化の方法についてお願いがあり投稿いたしました。プログラムの関数化というものを行いたいのですが方法が分からないので、以下のプログラムを関数化していただきたいのです。 #include <stdio.h> int main() { printf("摂氏と華氏を相互変換します。変換したい温度を入力してください。\n"); printf("入力例:32F, 100C, etc.数値と単位の間に空白は不要です。\n"); double x, xc; char u; scanf("%lf%c",&x,&u); if (u=='C') { xc = (x * 9 / 5) + 32; printf("%lf degCは%lf degFです。\n", x, xc); } else if (u=='F') { xc = (x - 32) * 5 / 9; printf("%lf degFは%lf degCです。\n", x, xc); } else { printf("書式が誤っています。\n"); } return 0; } コードを添えていただけるとさらに分かりやすくて助かります。お手数ですがよろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- TaTuToMiNi
- 回答数3
- プログラム改良 求む
こんにちは 以下の摂氏を華氏に変換するプログラミングを、摂氏が入力された場合はそのまま出力し、華氏が入力された場合は摂氏に変換してから出力するようなプログラミングに改良したいです。 #include <stdio.h> int main() { printf("摂氏を華氏に変換します。変換したい温度を摂氏で入力してください。\n"); double c, f; scanf("%lf",&c); f = (c * 9 / 5) + 32; printf("%lfºFです。", f); return 0; } 今のところ、プログラムにどのように摂氏を華氏の違いを認識させればいいかがわかりません。分かりやすくコードを添えていただけるとさらに助かります。お願いします。
- ベストアンサー
- C・C++・C#
- TaTuToMiNi
- 回答数1
- C言語 エンキューの問題について
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_QUEUE_LENGTH 11 // キューに用いる配列の⻑さ #define N 50 //乱数の範囲 typedef struct queue { int array[MAX_QUEUE_LENGTH]; int front; int rear; } Queue; Queue *init_queue() { printf("initialize queue\n"); Queue *queue = malloc(sizeof(Queue)); queue->front = 0; queue->rear = 0; return queue; } void print_test(char *line) { printf("-------------\n"); printf("test: %s\n", line); } void print_front_and_rear_index(Queue *queue) { // キューの front と rear を表示する関数 printf("front:%2d, rear:%2d\n", queue->front, queue->rear); } void print_queue(Queue *queue) { // キューの要素を front から rear まで表示する関数 } void enqueue(Queue *queue, int value) { // エンキューする関数 } void enqueue_test_items(Queue *queue, int n) { for (int i = 0; i < n; i++) { int score = rand() % N; enqueue(queue, score); } } void test_enqueue(Queue *queue) { print_test("print empty queue"); print_queue(queue); print_test("enqueue 10 items"); enqueue_test_items(queue, 10); print_test("print queue"); print_queue(queue); print_test("enqueue a item to full queue"); enqueue(queue, -1); } int main(void) { srand((unsigned)time(NULL)); // 乱数の初期化 Queue *queue = init_queue(); // キューの初期化 test_enqueue(queue); } 以下の雛形に従い,リングバッファによるキューに対して,エンキューする関数 enqueue を実装せよ. 関数 print_front_and_rear_index は,キューの front と rear を表示するための関数である. 問題に対する解答には不要であるがデバッグのために用意した. という問題なのですが関数print_queueは出来ましたが関数queueの中身がわかりませんので良ければ解答をお願いします。 自分が書いた関数print_queueは下に置いておきます 実行結果は数字以外は画像の通りになります。 void print_queue(Queue *queue) { if (queue->front == queue->rear) { printf("queue is empty\n"); } else { for (int i = queue->front; i % MAX_QUEUE_LENGTH != queue->rear; i++) { printf("queue[%2d]: %2d\n", i % MAX_QUEUE_LENGTH, } } }
- C言語 エンキューの問題について
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_QUEUE_LENGTH 11 // キューに用いる配列の⻑さ #define N 50 //乱数の範囲 typedef struct queue { int array[MAX_QUEUE_LENGTH]; int front; int rear; } Queue; Queue *init_queue() { printf("initialize queue\n"); Queue *queue = malloc(sizeof(Queue)); queue->front = 0; queue->rear = 0; return queue; } void print_test(char *line) { printf("-------------\n"); printf("test: %s\n", line); } void print_front_and_rear_index(Queue *queue) { // キューの front と rear を表示する関数 printf("front:%2d, rear:%2d\n", queue->front, queue->rear); } void print_queue(Queue *queue) { // キューの要素を front から rear まで表示する関数 } void enqueue(Queue *queue, int value) { // エンキューする関数 } void enqueue_test_items(Queue *queue, int n) { for (int i = 0; i < n; i++) { int score = rand() % N; enqueue(queue, score); } } void test_enqueue(Queue *queue) { print_test("print empty queue"); print_queue(queue); print_test("enqueue 10 items"); enqueue_test_items(queue, 10); print_test("print queue"); print_queue(queue); print_test("enqueue a item to full queue"); enqueue(queue, -1); } int main(void) { srand((unsigned)time(NULL)); // 乱数の初期化 Queue *queue = init_queue(); // キューの初期化 test_enqueue(queue); } 以下の雛形に従い,リングバッファによるキューに対して,エンキューする関数 enqueue を実装せよ. 関数 print_front_and_rear_index は,キューの front と rear を表示するための関数である. 問題に対する解答には不要であるがデバッグのために用意した. という問題なのですが上手くいかずに添付されている写真の実行結果通りになりません。なのでよければ解答をお願いします
- プログラミング言語、色々な書き方の種類について
こんにちは、プログラミグ言語のことで質問があります。 #include<stdio.h> int main(void){ double h,w,b; printf(":"); scanf("%lf",&h); printf(":"); scanf("%lf",&w); bmi=w/(h*h)*10000;//bがあなたの指数です。 printf("%.1f\n",b); return 0; } 以上のプログラムを 1.作成する関数がmain関数の上に位置する 2. 作成する関数がmain関数の下に位置する 3. main関数とは別の場所に位置する別ファイルで作成する の以上の3パターンで作成する方法を教えていただければ嬉しく思います。よろしくお願いします。
- C言語 ソートについて
#include <stdio.h> #include <stdbool.h> #define NUM_ARRAY 4 #define NUM_DATA 5 int count_swap = 0; // 交換回数 int count_comparison = 0; // 比較回数 void selection_sort(int a[], int n) { } int main(void) { int data[NUM_ARRAY][NUM_DATA] = {{9, 7, 5, 6, 8}, {9, 8, 7, 6, 5}, {5, 6, 7, 8, 9}, {5, 6, 8, 7, 9}}; for (int i = 0; i < NUM_ARRAY; i++) { count_swap = 0; count_comparison = 0; int d[NUM_DATA]; copy_array(data[i], d, NUM_DATA); // 配列のコピー printf("----------------\n"); print_array(d, NUM_DATA); // ソート前の配列の表示 selection_sort(d, NUM_DATA); // 挿入ソートの実行 print_array(d, NUM_DATA); // ソート後の配列の表示 printf("比較回数: %d\n", count_comparison); // 比較回数の表示 printf("交換回数: %d\n", count_swap); // 交換回数の表示 } } 上の雛形を使って選択ソートを実行するという問題なのですが途中までそれっぽいのは出来たのですが上手くいかないので解答をお願いします。 下に自分が今書いているものを置いておきます。 #include <stdbool.h> #include <stdio.h> #define NUM_ARRAY 4 #define NUM_DATA 5 int count_swap = 0; int count_comparison = 0; void swap(int d[], int i, int j) { count_swap += 1; printf("swap a[%d] = %d, a[%d] = %d\n", i, d[i], j, d[j]); int temp = d[i]; d[i] = d[j]; d[j] = temp; } void copy_array(int *a, int *b, int n) { for (int i = 0; i < n; i++) { b[i] = a[i]; } } void print_array(int d[], int n) { for (int i = 0; i < n; i++) { printf("%d ", d[i]); } printf("\n"); } bool compare(int d[], int i, int j) { count_comparison += 1; printf("compare a[%d] = %d, a[%d] = %d\n", i, d[i], j, d[j]); if (d[i] > d[j]) { return true; } else { return false; } } void selection_sort(int d[], int n) { int min; for (int i = 0; i < n - 1; i++) { min = i; for (int j = i + 1; j < i; j++) { if (compare(d, min, j)) { min = j; } } swap(d, i, min); print_array(d, n); } } int main(void) { int data[NUM_ARRAY][NUM_DATA] = { {9, 7, 5, 6, 8}, {9, 8, 7, 6, 5}, {5, 6, 7, 8, 9}, {5, 6, 8, 7, 9}}; for (int i = 0; i < NUM_ARRAY; i++) { count_swap = 0; count_comparison = 0; int d[NUM_DATA]; copy_array(data[i], d, NUM_DATA); // 配列のコピー printf("----------------\n"); print_array(d, NUM_DATA); // ソート前の配列の表⽰ selection_sort(d, NUM_DATA); // 挿⼊ソートの実⾏ print_array(d, NUM_DATA); // ソート後の配列の表⽰ printf("⽐較回数: %d\n", count_comparison); // ⽐較回数の表⽰ printf("交換回数: %d\n", count_swap); // 交換回数の表⽰ } }
- C言語 ソートについて
#include <stdbool.h> #include <stdio.h> void swap(char *a, char *b) { } bool is_at(char c) { } void justify(char line[], int n) { } int main(void) { char line[] = "a@b@@@c@@d@@@ef@@g"; size_t n = sizeof(line) - 1; justify(line, n); printf("%s\n", line); return 0; } 上の雛形を使って文字列lineに含まれる@以外の文字を文字列の前の方に詰めていくプログラミングを作るという問題を解いていたのですが下のプログラミングまでは出来たのですが最後のjustifyの部分がわかりません 良ければ解答をお願いします #include <stdbool.h> #include <stdio.h> void swap(char *a, char *b) { char temp = *a; *a = *b; *b = temp; } bool is_at(char c) { if(c == '@') { return true; } else { return false; } } void justify(char line[], int n) { for(int i=0;i<n-1;i++) { } } int main(void) { char line[] = "a@b@@@c@@d@@@ef@@g"; size_t n = sizeof(line) - 1; justify(line, n); printf("%s\n", line); return 0; }