
Case 1
Text9.Text = "AB";
Text10.Text = "A"; // 1文字目
Text11.Text = "B"; // 2文字目
case 2;
Text9.Text = "Ab";
Text10.Text = "A";
Text11.Text = "b";
case 3;
Text9.Text = "aB";
Text10.Text = "a";
Text11.Text = "B";
case 4;
Text9.Text = "ab";
Text10.Text = "a";
Text11.Text = "b";
上記のようなCase 文を C を使って作成したいのですが,
A~J の大文字とa~jまでの小文字をつかって,2文字の文字列をつくるとき,
1文字目と2文字目が,形態も名称も異なる文字列(例 AB , Ab aB, ab, AC, Ac aC ac, ...)のcase文をつくりたいのですが,
'const char *' 型は 'char *' 型に変換できないというエラーメッセージがでてしまいます.下記プログラムをどう直せばいいかおしえてください.
#include <stdio.h>
#define MAX_NAME 256
int main(void)
{
const char *NAME12 = "Text9";
const char *NAME1 = "Text10";
const char *NAME2 = "Text11";
const char *ALPH = "ABCDEFGHIJabcdefghij";
FILE *fp = NULL;
char f_name[MAX_NAME];
int count = 0;
char *p = ALPH;
char *q = ALPH;
printf("ファイル名:");
scanf("%s", f_name);
fp = fopen(f_name, "w");
if (fp == NULL) {
printf("'%s':ファイルが見つかりません\n", f_name);
} else {
for (p = ALPH; *p != '\0'; p++) {
for (q = ALPH; *q != '\0'; q++) {
if (*p != *q) {
count++;
fprintf(fp, "Case %d\n", count);
fprintf(fp, "%s.Text = \"%c%c\"\n", NAME12, *p, *q);
fprintf(fp, "%s.Text = \"%c%c\"\n", NAME1, *p, *q);
fprintf(fp, "%s.Text = \"%c%c\"\n", NAME2, *p, *q);
}
}
}
fclose(fp);
}
return 0;
}
No.3ベストアンサー
- 回答日時:
★回答者 No.2 さんと同じです。
・『const char *』型と『char *』型のタイプを合わせます。
・つまり、
const char *ALPH = "ABCDEFGHIJabcdefghij";
const char *p = ALPH;
const char *q = ALPH;
・とするか、
char *ALPH = "ABCDEFGHIJabcdefghij";
char *p = ALPH;
char *q = ALPH;
・とします。
・また、ちょっと間違いがあるので指摘します。
・『fprintf(fp, "%s.Text = \"%c%c\"\n", NAME1, *p, *q);』は、
『fprintf(fp, "%s.Text = \"%c\"\n", NAME1, *p );』です。
・『fprintf(fp, "%s.Text = \"%c%c\"\n", NAME2, *p, *q);』は、
『fprintf(fp, "%s.Text = \"%c\"\n", NAME2, *q);』になります。
・以上。分かりますか?
●小言
・このプログラムで出力されるCソースを、何かの処理ルーチンとして使うのですか?
・もっと良い方法がありますけど。→文字列を動的に作成する方法はどうでしょう。
・以下にサンプルを載せておきます。→処理速度は少し落ちます。ループしているので。
●サンプル
void MakeString( int num, const char **text9, const char **text10, const char **text11 )
{
static char buff9[ 4 ], buff10[ 4 ], buff11[ 4 ];
static const char *ALPH = "ABCDEFGHIJabcdefghij";
const char *p = ALPH;
const char *q = ALPH;
for ( p = ALPH ; *p != '\0' ; p++ ){
for ( q = ALPH ; *q != '\0' ; q++ ){
if ( *p != *q ){
if ( --num <= 0 ){
*text9 = buff9; sprintf( buff9, "%c%c", *p, *q );
*text10 = buff10; sprintf( buff10, "%c", *p );
*text11 = buff11; sprintf( buff11, "%c", *q );
return;
}
}
}
}
}
●使用例
const char *Text9;
const char *Text10;
const char *Text11;
MakeString( 123, &Text9, &Text10, &Text11 );
・以上。おわり。
No.2
- 回答日時:
VisualC++のコンパイラでコンパイルしたら
その部分はWarningにはなりましたがErrorではなかったです。
C++ならErrorなのでC++としてコンパイルしたのかな?
修正ですが、
> char *p = ALPH;
> char *q = ALPH;
を
const char *p = ALPH;
const char *q = ALPH;
と直せば良さそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
このQ&Aを見た人はこんなQ&Aも見ています
-
char*を初期化したいのですが
C言語・C++・C#
-
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
-
4
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
5
関数から配列を返すには?
C言語・C++・C#
-
6
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
7
静的でないメンバ関数の呼び出しが正しくありません
C言語・C++・C#
-
8
複数の変数を宣言する時、同時に初期化?できないでしょうか?
Java
-
9
適切な変換関数が存在しない???
C言語・C++・C#
-
10
「#undef」と「#define」の使い方について
C言語・C++・C#
-
11
#define _CRT_SECURE_NO_WARNINGS について
C言語・C++・C#
-
12
VisualStudio2022でC言語プログラムで全角文字を使用すると不明なエラーが表示される
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
構造体の各メンバにfor文からア...
-
ネットワークにつながっている...
-
半角カナ→16進
-
配列から指定するデータを取り...
-
c言語配列の結合についてです。...
-
charでの計算?
-
テキストデータをそのままバイ...
-
c#でbmp画像の上下反転
-
C言語のポインターで詰まっている
-
fgetc()関数の動作について
-
配列をnビットシフトする
-
PING JPEGファイルのExif規格の...
-
コマンドラインからの入力で
-
日付表示の方法
-
main の引数には const 付けた方が
-
char型からのバイト数取得
-
'const char *' 型は 'char *' ...
-
8進数と16進数で表示するプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
間接参照のレベルが異なっています
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
テキストデータをそのままバイ...
-
charからLPTSTRへの変換方法
-
atoi( ) の反対をやりたい
-
charでの計算?
-
配列をnビットシフトする
-
c++ 文字列を入力して、一文字...
-
'const char *' 型は 'char *' ...
-
c言語でユーザ関数を利用して入...
-
干支のプログラム
-
switch文で文字を比較すること...
-
char型からのバイト数取得
-
ネットワークにつながっている...
-
getchar()を int でとる理由...
-
間接操作のレベルとは
-
str系関数を使わずに二つの文字...
おすすめ情報