アプリ版:「スタンプのみでお礼する」機能のリリースについて

その後のプログラムです。

/************************************************************

文字列を比較する関数

戻り値 : ps1 > ps21

ps1 = ps20

ps1 < ps2 -1

*************************************************************/

intstr_cmp(char *ps1,char *ps2)

/*ps1,ps2 : 比較する文字列が入った配列を指すポインタ*/

{

intkekka;/*比較結果*/



for(;*ps1 != '¥0' && *ps2 != '¥0' && *ps1 == *ps2 ;ps1++,ps2++);

if(*ps1 > *ps2)

{

kekka = 1;

}

else if(*ps1 == *ps2)

{

kekka = 0;

}

else

{

kekka = -1;

}



return kekka;



}



/*************************************************************

文字列と文字列とを交換する関数

*************************************************************/

voidstr_change(char *ps1,char *ps2)

/* ps1,ps2 : 交換する文字列が入った配列へのポインタ*/



{

chartemp[DATA_LEN]/*交換用一時保管*/



str_cpy(temp,ps1);/*複写 ps1->temp */

str_cpy(ps1,ps2);/*複写 ps2->ps1 */

str_cpy(ps2,temp);/*複写 temp->ps2 */



}





/*************************************************************

文字列を複写する関数

*************************************************************/

voidstr_cpy(char *pd,char *ps)

/* char *pd :複写される配列へのポインタ*/

/* char *ps :複写する配列へのポインタ*/

{

for(;*ps != '¥0';ps++,pd++)

{

*pd = *ps;/*1文字複写*/

}

*pd = '¥0';/*最後の1文字*/

}

これをコンパイルすると
kansuu4.c: In function ‘atr_cpy’:
kansuu4.c:18: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘main’
kansuu4.c:41: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
kansuu4.c:57: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
kansuu4.c:85: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
kansuu4.c:112: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
kansuu4.c:128: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
kansuu4.c:134: error: expected ‘{’ at end of input

と出ました。

本当は自分で努力するべきだと思います。
「自分でよく見てみろ。」
でも結構です。
ご多忙中申し訳ありません。
ご回答の程、宜しくお願い致します。

A 回答 (5件)

「自分でよく見てみろ。



ちなみに私の環境でコンパイルしたら、エラーが量産されました。

エラー E2451 test.cpp 19: 未定義のシンボル intkekka(関数 intstr_cmp(char *,char *) )
エラー E2451 test.cpp 29: 未定義のシンボル kekka(関数 intstr_cmp(char *,char *) )
エラー E2451 test.cpp 73: 未定義のシンボル chartemp(関数 voidstr_change(char *,char *) )
エラー E2451 test.cpp 73: 未定義のシンボル DATA_LEN(関数 voidstr_change(char *,char *) )
エラー E2379 test.cpp 77: ステートメントにセミコロン(;)がない(関数 voidstr_change(char *,char *) )
エラー E2268 test.cpp 79: 未定義の関数 'str_cpy' を呼び出した(関数 voidstr_change(char *,char *) )
エラー E2451 test.cpp 81: 未定義のシンボル temp(関数 voidstr_change(char *,char *) )
警告 W8070 test.cpp 85: 関数は値を返すべき(関数 voidstr_change(char *,char *) )
警告 W8070 test.cpp 115: 関数は値を返すべき(関数 voidstr_cpy(char *,char *) )
    • good
    • 0
この回答へのお礼

そうですね。
かと言って他の言語も知りませんが、C言語は難しい、と感じます。
仕事として今は必要がないからかも知れませんが達成感などないです。
極めるとOSだって作れちゃう・・・と言う言葉を鵜呑みにしてしまったのかも知れません。
それは私にはハードルが高過ぎでしょう。
でもありがとうございました。

お礼日時:2011/01/15 18:16

おや、頻繁に出て来る質問の「for(;*ps != '\0';ps++,pd++)」の書き方が上級者風(ps++,pd++)っていうのもアンバランスで面白いですね。


また、for() の初期値を「 ; 」だけでクリアする使い方も気に入りました。 ただ、それは while() に変更するとプログラムの見通しが良くなるように思います。




/* int, void, スペースをきちんと書くと
こんな感じになりました。 */

#include <stdio.h>
#define N 7
#define ON 1
#define OFF 0
#define DATA_LEN 20

/* プロトタイプ宣言 */
void printData(char p[][DATA_LEN], int n);
void sort(char p[][DATA_LEN], int n);
void str_change(char *ps1, char *ps2);
void str_cpy(char *pd, char *ps);
int str_cmp(char *ps1, char *ps2);

int main(void)
{
char p_data[N][DATA_LEN]
={"ふじさわ","えのしま","しちりがはま","ごくらくじ","はせ","ゆいがはま","かまくら"};
printData(p_data,N);
sort(p_data,N);
printf("\nソートしました\n\n");
printData(p_data,N);

return 0;
}

void printData(char p[][DATA_LEN], int n)
{
int i;
for(i=0;i<n;i++)
printf("%s\n",p[i]);
}

void sort(char p[][DATA_LEN], int n)
{
int sw;
int i,j;
sw = ON;
for(i = n-1; i>=1 && sw == ON; i--){
sw = OFF;
for(j = 0; j< i; j++){
if(str_cmp(p[j],p[j+1]) > 0){
str_change(p[j],p[j+1]);
sw = ON;
}
}
}
}


int str_cmp(char *ps1, char *ps2)
{
int kekka;
while(*ps1 && *ps2 && *ps1==*ps2) ps1++,ps2++;
//for(; *ps1 != '\0' && *ps2 != '\0' && *ps1 == *ps2; ps1++,ps2++);
if(*ps1 > *ps2)
kekka = 1;
else if(*ps1 == *ps2)
kekka = 0;
else
kekka = -1;
return kekka;
}


void str_change(char *ps1, char *ps2)
{
char temp[DATA_LEN];
str_cpy(temp,ps1);
str_cpy(ps1,ps2);
str_cpy(ps2,temp);
}


void str_cpy(char *pd, char *ps)
{
while(*pd++=*ps++);
//for(;*ps != '\0';ps++,pd++)
//*pd = *ps;
//*pd = '\0';
}
    • good
    • 0
この回答へのお礼

そうですね。
かと言って他の言語も知りませんが、C言語は難しい、と感じます。
仕事として今は必要がないからかも知れませんが達成感などないです。
極めるとOSだって作れちゃう・・・と言う言葉を鵜呑みにしてしまったのかも知れません。
それは私にはハードルが高過ぎでしょう。
まだC言語って何者かがつかめません。
でもありがとうございました。

お礼日時:2011/01/15 18:18

実際のソースをちゃんと貼り付けないとどうにもなりませんよ。


>kansuu4.c: In function ‘atr_cpy’:
このエラーに該当するところはないし。
    • good
    • 0
この回答へのお礼

まだC言語って何者かがつかめません。
Windowsでやる場合とEmacsでやる場合でコンパイルが違う結果になるような気がします。
とにかく解っていませんが、ありがとうございます。

お礼日時:2011/01/15 18:22

タイプミスを直せば動きます。



あとは、無駄な改行とコメントを省くこと。そうすれば、一回で投稿できます。

#include <stdio.h>

#define N 7
#define ON 1
#define OFF 0
#define DATA_LEN 20

void printData(char p[][DATA_LEN], int n);
void sort(char p[][DATA_LEN], int n);
void str_change(char *ps1,char *ps2);
void str_cpy(char *pd,char *ps);
int str_cmp(char *ps1,char *ps2);

void main(){

char p_data[N][DATA_LEN] = {"ふじさわ","えのしま","しちりがはま","ごくらくじ","はせ","ゆいがはま","かまくら"};

printData(p_data,N);

sort(p_data,N);

printf("\nソ\ートしました\n\n");
printData(p_data,N);
}

void printData(char p[][DATA_LEN], int n){

int i;

for(i=0;i<n;i++){
printf("%s\n",p[i]);
}
}

void sort(char p[][DATA_LEN],int n){

int sw;
int i,j;

sw = ON;
for(i = n-1 ; i>=1 && sw == ON ; i--){
sw = OFF;
for(j = 0; j< i ;j++){
if(str_cmp(p[j],p[j+1]) > 0){
str_change(p[j],p[j+1]);
sw = ON;
}
}
}
}
int str_cmp(char *ps1,char *ps2){

int kekka;
for(;*ps1 != '\0' && *ps2 != '\0' && *ps1 == *ps2 ;ps1++,ps2++);
if(*ps1 > *ps2){
kekka = 1;
}else if(*ps1 == *ps2){
kekka = 0;
}else{
kekka = -1;
}
return kekka;
}
void str_change(char *ps1,char *ps2){

char temp[DATA_LEN];

str_cpy(temp,ps1);
str_cpy(ps1,ps2);
str_cpy(ps2,temp);
}
void str_cpy(char *pd,char *ps){

for(;*ps != '\0';ps++,pd++){
*pd = *ps;
}
*pd = '\0';
}
    • good
    • 0
この回答へのお礼

もはや難しすぎるって現状です。
とにかく、ありがとうございました。

お礼日時:2011/01/15 18:24

そもそも、ちゃんと cut&paste してないので、オリジナルソースがみえてませんが。



instr_comp て関数宣言からして変ですが。

さらに、ソースがまともに表示できてないので行番との対応付けは、回答者がするの?

結論としては、質問のしかたが、なっちゃいないと思う。
    • good
    • 0
この回答へのお礼

もう色んな方に質問を丸投げしてしまって
こんな結果になりました。
本当に申し訳ございません。
今後は一つ一つやって行きます。

お礼日時:2011/01/15 18:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!