すみません課題なんですが・・・・
すみません課題なんですが・・・・
構造体 TEST_Vの実体testをmain関数のローカルで宣言し、test()関数を呼び出す。
test()関数内でtestの内容を設定する。設定内容は以下の通り。
a:1000,
b:[システムサポート],
c:文字[P]を代入しなさい。
test()関数を呼び出す前後で各メンバを表示する事。
又、main()関数の先頭でtestくぉ初期化する事。0x00で埋める。
#include <stdio.h>
#include <string.h>
struct test_v{
int a;
char b[256];
char c;
};
void change(test);
int main(void)
{
test_v test={0,"0",'0'};
printf("初期状態を表示\n");
printf("a=%d\n", test1.a);
printf("b=%s\n", test1.b);
printf("c=%c\n", test1.c);
test1=change(test);
printf("変更後の変数a,b,cを表示します\n");
printf("a=%d\n", test1.a);
printf("b=%s\n", test1.b);
printf("c=%c\n", test1.c);
return 0;
}
ここからわかりません。・・・どなたか教えてください・・・
test()関数内でtestの内容を設定する。設定内容は以下の通り。
a:1000,
b:[システムサポート],
c:文字[P]を代入しなさい。
test()関数を呼び出す前後で各メンバを表示する事。
又、main()関数の先頭でtestくぉ初期化する事。0x00で埋める。
#include <stdio.h>
#include <string.h>
struct test_v{
int a;
char b[256];
char c;
};
void change(test);
int main(void)
{
test_v test={0,"0",'0'};
printf("初期状態を表示\n");
printf("a=%d\n", test1.a);
printf("b=%s\n", test1.b);
printf("c=%c\n", test1.c);
test1=change(test);
printf("変更後の変数a,b,cを表示します\n");
printf("a=%d\n", test1.a);
printf("b=%s\n", test1.b);
printf("c=%c\n", test1.c);
return 0;
}
ここからわかりません。・・・どなたか教えてください・・・
Re:すみません課題なんですが・・・・
>構造体 TEST_V
とあるので、構造体の宣言はこのようになります。
#typedef struct test_v{
int a;
char b[256];
char c;
}TEST_V;
※ C言語では大文字、小文字が区別されるので注意してください。
#typedefをまだ習っていないようでしたら、以下の説明の「TEST_V」は「struct TEST_V」に
置き換えてお考えください。
>構造体 TEST_Vの実体testをmain関数のローカルで宣言し、test()関数を呼び出す。
>void change(test);
test関数?change関数?どちらですか?
とりあえずchange関数で構造体に値を設定すると仮定して、
上記の関数宣言ではchange関数はtestがどんな型かわかりませんよね?
void change(TEST_V test);
としてあげると良いでしょう。
>test()関数内でtestの内容を設定
change関数で設定された値をmain関数でも使用したい場合は、
2つのやり方があります。
【1】構造体をリターン値として受け取る
TEST_V change(void);
としてあげます。
【2】構造体をポインタで渡す
void change(TEST_V *ptest);
としてあげます。
※ main関数のtestと区別しやすくするために、変数名をptestにしました。
関数内で構造体に値を設定する方法は、↓のHPを熟読していただければ
ヒントが得られると思います。
http://www9.plala.or.jp/sgwr-t/c/sec15-4.html
またわからないことがありましたら、問い合わせください。
とあるので、構造体の宣言はこのようになります。
#typedef struct test_v{
int a;
char b[256];
char c;
}TEST_V;
※ C言語では大文字、小文字が区別されるので注意してください。
#typedefをまだ習っていないようでしたら、以下の説明の「TEST_V」は「struct TEST_V」に
置き換えてお考えください。
>構造体 TEST_Vの実体testをmain関数のローカルで宣言し、test()関数を呼び出す。
>void change(test);
test関数?change関数?どちらですか?
とりあえずchange関数で構造体に値を設定すると仮定して、
上記の関数宣言ではchange関数はtestがどんな型かわかりませんよね?
void change(TEST_V test);
としてあげると良いでしょう。
>test()関数内でtestの内容を設定
change関数で設定された値をmain関数でも使用したい場合は、
2つのやり方があります。
【1】構造体をリターン値として受け取る
TEST_V change(void);
としてあげます。
【2】構造体をポインタで渡す
void change(TEST_V *ptest);
としてあげます。
※ main関数のtestと区別しやすくするために、変数名をptestにしました。
関数内で構造体に値を設定する方法は、↓のHPを熟読していただければ
ヒントが得られると思います。
http://www9.plala.or.jp/sgwr-t/c/sec15-4.html
またわからないことがありましたら、問い合わせください。
Re:すみません課題なんですが・・・・
#typedef struct test_v{ int a; char b[256]; char c; }TEST_V; ×:#typedef ○:typedeftypedefに # は付けてはいけません。
(#はプリプロセッサ命令及び文字連結に使用します)
Re:すみません課題なんですが・・・・
#include <stdio.h>
#include <string.h>
struct test_v{
int a;
char b[256];
char c;
};
struct test_v test(void);
int main(void)
{
struct test_v test1;
test1.a=0;
test1.c='0';
printf("初期状態を表示\n");
printf("a=%d\n", test1.a);
printf("b=%s\n", test1.b);
printf("c=%c\n", test1.c);
test1=test();
printf("変更後の変数a,b,cを表示します\n");
printf("a=%d\n", test1.a);
printf("b=%c\n", test1.b);
printf("c=%c\n", test1.c);
return 0;
}
struct test_v test(void)
{
struct test_v test2;
test2.a=1000;
test2.c='p';
return test2;
}
こんな感じでしてみました^^;しかし、bの初期化と関数内でどのように書けばいいのかわかりません。
#include <string.h>
struct test_v{
int a;
char b[256];
char c;
};
struct test_v test(void);
int main(void)
{
struct test_v test1;
test1.a=0;
test1.c='0';
printf("初期状態を表示\n");
printf("a=%d\n", test1.a);
printf("b=%s\n", test1.b);
printf("c=%c\n", test1.c);
test1=test();
printf("変更後の変数a,b,cを表示します\n");
printf("a=%d\n", test1.a);
printf("b=%c\n", test1.b);
printf("c=%c\n", test1.c);
return 0;
}
struct test_v test(void)
{
struct test_v test2;
test2.a=1000;
test2.c='p';
return test2;
}
こんな感じでしてみました^^;しかし、bの初期化と関数内でどのように書けばいいのかわかりません。
Re:すみません課題なんですが・・・・
keichanさん
>typedefに # は付けてはいけません。
いつもの悪い癖が出てしまいました。ご指摘ありがとうございます。
ももさん
>bの初期化と関数内でどのように書けばいいのかわかりません。
構造体は置いておいて
char str[256];
という変数があったときに、初期化はどうしますか?
また、どのように値を代入していましたか?
>typedefに # は付けてはいけません。
いつもの悪い癖が出てしまいました。ご指摘ありがとうございます。
ももさん
>bの初期化と関数内でどのように書けばいいのかわかりません。
構造体は置いておいて
char str[256];
という変数があったときに、初期化はどうしますか?
また、どのように値を代入していましたか?
Re:すみません課題なんですが・・・・
初期化はmemset関数を使えば便利かもしれませんが…使い方が分からなければ、ループで初期化してもいいのではないでしょうか?
for( i = 0 ; i < 256 ; i++ )
{
test1.b = '\0';
}
こんな感じでどうでしょう?
文字列への代入(?)はsprintf関数を使うといいですよ(^-^)
ところで、今回の課題に<string.h>って、必要ない気がするのですが…?
for( i = 0 ; i < 256 ; i++ )
{
test1.b = '\0';
}
こんな感じでどうでしょう?
文字列への代入(?)はsprintf関数を使うといいですよ(^-^)
ところで、今回の課題に<string.h>って、必要ない気がするのですが…?
Re:すみません課題なんですが・・・・
for( i = 0 ; i < 256 ; i++ )
{
test1.b = '\0';
}
を利用したんですが、表示に0がかあり並びました^^;
1つだけ0を表示したかったんですが・・。
{
test1.b = '\0';
}
を利用したんですが、表示に0がかあり並びました^^;
1つだけ0を表示したかったんですが・・。
Re:すみません課題なんですが・・・・
あら?0x00で初期化というのは、文字列の終わりを示す'\0'で初期化という意味ではなかったのですね。
1つだけ0をするのであれば…
sprintf( test1.b , "0" );
でいけるかと思います。
1つだけ0をするのであれば…
sprintf( test1.b , "0" );
でいけるかと思います。
Re:すみません課題なんですが・・・・
ヒントです(^-^)
#include <stdio.h> void Plus( int *pVal ) { ( *pVal ) += 5; } int main( void ) { int nVal = 0; printf( "変更前の nVal の値\n" ); printf( "nVal = %d\n" , nVal ); Plus( &nVal ); printf( "Plus関数通過後の nVal の値\n" ); printf( "nVal = %d\n" , nVal ); return( 0 ); }
Re:すみません課題なんですが・・・・
#include <stdio.h>
#include <string.h>
struct test_v{
int a;
char b[256];
char c;
};
void test(struct test_v *test1);
int main(void)
{
struct test_v test1={0,"\0",'0'};
printf("初期状態を表示\n");
printf("a=%d\n", test1.a);
printf("b=%s\n", test1.b);
printf("c=%c\n", test1.c);
test(&test1);
printf("変更後の変数a,b,cを表示します\n");
printf("a=%d\n", test1.a);
printf("b=%s\n", test1.b);
printf("c=%c\n", test1.c);
return 0;
}
void test(struct test_v *test1)
{
struct test_v test2;
test2->a=1000;
strcpy(test2->b,"システムサポート");
test2->c='p';
}
こんな感じなんでしょうか? 少し自分なりに書いてみました。
#include <string.h>
struct test_v{
int a;
char b[256];
char c;
};
void test(struct test_v *test1);
int main(void)
{
struct test_v test1={0,"\0",'0'};
printf("初期状態を表示\n");
printf("a=%d\n", test1.a);
printf("b=%s\n", test1.b);
printf("c=%c\n", test1.c);
test(&test1);
printf("変更後の変数a,b,cを表示します\n");
printf("a=%d\n", test1.a);
printf("b=%s\n", test1.b);
printf("c=%c\n", test1.c);
return 0;
}
void test(struct test_v *test1)
{
struct test_v test2;
test2->a=1000;
strcpy(test2->b,"システムサポート");
test2->c='p';
}
こんな感じなんでしょうか? 少し自分なりに書いてみました。
Re:すみません課題なんですが・・・・
> こんな感じなんでしょうか? 少し自分なりに書いてみました。
もし、お手元にコンパイル・実行できる環境があるならば、
まずはご自分で確かめてみてください。
もし、お手元にコンパイル・実行できる環境があるならば、
まずはご自分で確かめてみてください。