回答数
気になる
-
アンリアルエンジンをワンツーマンで個人指導してくれる場所はありますか?
アンリアルエンジンをワンツーマンで個人指導してくれる場所はありますか?
質問日時: 2021/03/07 07:16 質問者: captain06
ベストアンサー
2
1
-
C言語 構造体について
typedef struct { double dev[5]; }Deviation; Deviation data[50]; 上のdata[0].dev[0]からdata[50].dev[5]まで、全部を0としたいのですがどうすればできますか? Deviation data[50] = { {{0,0,0,0,0}}, {{0,0,0,0,0}}, : : としていくのは現実的でないので、、、
質問日時: 2021/03/05 21:13 質問者: miyabiishiko
ベストアンサー
1
0
-
C言語 平均点を求める
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <ctype.h> typedef struct { char FamilyName[32]; char FirstName[32]; int Score[5]; }Student; int main(void) { int sum[5]; double ave[5]; int i=0, m=0; Student data[2] = { { "nobi", "nobita", { 25, 10, 40, 0, 15 } }, { "minamoto", "shizuka", { 75, 60, 85, 90, 70 } }, }; for( i = 0; i < 5; i++ ) { sum[i] = data[0].Score[i] + data[1].Score[i]; } ave[0] = sum[0]/2; ave[1] = sum[1]/2; ave[2] = sum[2]/2; ave[3] = sum[3]/2; ave[4] = sum[4]/2; printf("平均点: %2.2f %2.2f %2.2f %2.2f %2.2f\n",ave[0], ave[1], ave[2], ave[3], ave[4]); } 上記は2人の生徒の平均点を求めるプログラムです。 もし2人でなくもっと多くの人数がいる場合は、 for( i = 0; i < 5; i++ ) { sum[i] = data[0].Score[i] + data[1].Score[i]; } の部分をdata[m]としてどうすればよいのでしょうか? 下記で試したところ変な数ができてしまいます、、 for( i = 0; i < 5; i++ ) { for( m = 0; m < 50; m++ ) //50人設定 { sum[i] += data[m].Score[i]; } }
質問日時: 2021/03/05 19:21 質問者: miyabiishiko
ベストアンサー
4
0
-
VisualStudioからVScodeへの移植
C#を1年ほどいじっている経験しかない初心者です。 VisualStudio(v16.4.5)でFormアプリを作成していますが、このソースコードをVScodeへ移植するのは難しいでしょうか? VisualStudioでのアプリは動作しています。アプリの機能はHTTPサーバーと印刷ですがソースコードはネットから拾って来たもので中身はほとんど理解できていません。
質問日時: 2021/03/05 18:08 質問者: yukimesan
ベストアンサー
8
0
-
ベストアンサー
1
0
-
c# Windows Form App テーブルレイアウトパネルの枠線を太線、黒にしたいです。 使っ
c# Windows Form App テーブルレイアウトパネルの枠線を太線、黒にしたいです。 使ったことないのですが、カスタムコントロールを使用する必要があるのでしょうか? よろしくお願いいたします。
質問日時: 2021/03/04 04:37 質問者: 0987654321adgjmptw
ベストアンサー
1
0
-
C言語 構造体の名前欄?を小文字から大文字に変換する方法
typedef struct { char FamilyName[32]; char FirstName[32]; int Score[5]; } Student; void str_toupper(???) { for(i=0;i<50;i++){ //生徒50人いる設定 int m; while (data[i].FirstName[m]) { data[i].FirstName[m] = toupper(data[i].FirstName[m]); m++; } 構造体の名前欄?を小文字から大文字に変換する方法が知りたいです。 文字列を大文字変換する方法はわかるのですが、構造体になるとどうすればよいかわかりません。 こうかなと、上のようにがんばってみましたが、全然できませんでした。
質問日時: 2021/03/04 01:27 質問者: miyabiishiko
ベストアンサー
3
0
-
C言語のif文について教えてください
c言語の勉強をしていて、if文について1つ疑問があります。 それは、if(x<=y<=z)の形(x、zは数です。)で上手く作動しない理由です。 if(x<=y)やif(y<=z)の形では作動するのに、なぜ上手く作動しないのでしょうか? 初歩的な質問ですいません。
質問日時: 2021/03/03 16:43 質問者: C初心者
ベストアンサー
8
0
-
スタック破壊の上手な見つけ方を教えてください
下記のようなコードはスタック破壊します。 void my_substr(char **dst, char *str, size_t oft, size_t len) { *dst = (char *)malloc(len + 1); memcpy(*dst, (str + oft), len); *(dst + len) = '\0'; return; } main()から直接呼んだ程度ならその場でセグメント違反となってくれるのでいいのですが、呼ばれる位置が深いと、(処理系によるかもしれませんが)上位関数のスタック領域を上手に壊してくれて別の箇所で異常動作しているように見えるため、原因特定が困難になる場合があります。 このようなバグを簡単に見つけられるような方法や、最近のLinuxで手軽に使えるツールなどを教えてください。 #サンプルコードそのものに対する突っ込みはご容赦ください、説明のため簡略化しているだけですので
質問日時: 2021/03/02 09:54 質問者: k-841
解決済
3
0
-
C言語 構造体を使って集計する
Yamada Hanako 56 Suzuki Taro 79 : : というような計50人のテスト結果が書いてあるファイルがあったとして(ファイル名tensu.txt) このファイルからデータを読み込んで平均点や偏差値などを求めて別ファイルsyukei.txtに出力したいです。このとき構造体を使って求めたいのですが、まずファイルデータを構造体に入れる?ところから分かりません。ソースコードと一緒に詳しく説明お願いします。
質問日時: 2021/03/01 12:40 質問者: miyabiishiko
ベストアンサー
1
0
-
C言語 構造体
数人分の点数データがあります。構造体には氏名と点数が書いてあります。これを名前順に並べ変えたいのですが、どのようにすればよいのでしょうか?初心者で調べてみてもよくわかりません。
質問日時: 2021/02/28 15:55 質問者: miyabiishiko
解決済
4
0
-
c# のwindowsフォームアプリケーションでフォーム①に配置されたリッチテキストボックスのフォン
c# のwindowsフォームアプリケーションでフォーム①に配置されたリッチテキストボックスのフォント大小や色などを変更するメニュー/機能をToolStripで作成しました。 ここまでは良いのですが、別のフォーム②に配置したリッチテキストにもフォーム①のToolstripを使用したい(使いまわしたい)と思いました。しかし方法がわかりません。Toolstripをユーザーコントロールみたいに共通化されたコントロールとして扱う方法はないでしょうか。ご回答よろしくお願い致します。
質問日時: 2021/02/26 21:43 質問者: monapiii
ベストアンサー
1
0
-
C言語 乱数を階級分け
乱数を使って得た数値50個を階級分けしたいのですが, やりかたがわかりません。どなたか教えていただけたら嬉しいです。 乱数は for(i=0;i<50;i++){ size[i]=rand()%10+rand()%10; } で作成しこれを10刻みで何個ずつあったかわけたいです
質問日時: 2021/02/24 14:12 質問者: drops10
ベストアンサー
2
0
-
c# string型の変数に、ダブルクォーテーション混じりの文字列を入れるには? どう書けばいいです
c# string型の変数に、ダブルクォーテーション混じりの文字列を入れるには? どう書けばいいですか? ""2個重ねるやり方と、¥"エスケープのやり方でエラーになってしまいます。
質問日時: 2021/02/23 13:24 質問者: 0987654321adgjmptw
ベストアンサー
1
0
-
C言語 サイコロ 2つの値を返せない
プログラム超初心者です C言語についてです。 サイコロを振る関数を作り、その関数を二回呼び出し丁半判定をする プログラムが作りたいのですが、毎回二回振ったサイコロの値が同じになってしまいます。 おそらくsaikoro関数の戻り値がsで固定されていることが原因かと思うのですが、解決策がわかりません。以下自作のプログラムです。 int main(){ chohan(); return(0); } int saikoro(){ srand( (unsigned int)time(NULL) ); rand(); int s; s=rand()%6+1; return(s); } void chohan(){ int a,b; a=saikoro(); b=saikoro(); printf("%d\n%d",a,b); }
質問日時: 2021/02/23 13:05 質問者: drops10
ベストアンサー
1
0
-
#include <stdio.h> int main(void) { char str[] = "
#include <stdio.h> int main(void) { char str[] = "0123456789"; printf("%d\n", str[2] + str[4]); } なぜ、配列の書き方が char str[] = "0123456789"の場合は str[2] + str[4]の足し算が50+52で102と10進数で出るのでしょうか? そういうルールなのでしょうか? てっきり答えは6と思っていました。 また、 #include <stdio.h>int main(void) { char str[] = { 1,2,3,4,5 }; printf("%d\n", str[1] + str[3]); } の char str[] = { 1,2,3,4,5 }; とした場合は6と出ます。 char str[] = "0123456789";とchar str[] = { 1,2,3,4,5 };は同じ書き方だと思っていましたが、その文字列を扱う変数によっては、例えば配列などによっては扱いが違うと今更ながらわかりました。
質問日時: 2021/02/22 11:50 質問者: captain06
解決済
4
0
-
sscanfとscanfの違いがよくわからないのですが、簡単に優しく教えて下さい。 お願い致します。
sscanfとscanfの違いがよくわからないのですが、簡単に優しく教えて下さい。 お願い致します。 また、scanfは入力された文字列を読み込みますが、sscanfは文字列を他の変数、例えばaその文字列の先端のアドレスを渡したり、文字の1を数値としてのに変換すると習ったのですがあっていますか? 補足ですいません。 sscanfに関する説明不足と関数atoiについて。 sscanfは1文字を数値、すなわち、文字1を数値1に変換してそのaのアドレスを得て、aに渡すのですよね。 ここまでは理解しました。 ですが、 sscanfは1文字を数値、すなわち、文字1を数値1に変換 に関しては関数atoiと違いがわかりません。 プログラムの書き方によりどっちも使えて、 例えば、文字1(文字コード)を(1の文字コードの)数値49とかではなく、まんま数値の1に出来るのでしょうか?
質問日時: 2021/02/21 19:17 質問者: captain06
ベストアンサー
2
1
-
#include <stdio.h>int main(void) { char str[] = "0
#include <stdio.h>int main(void) { char str[] = "0123456789"; int a, b; sscanf(str + 2, "%1d", &a);//3番目の数字があるアドレスを指定して、1文字だけ数値として読み取る sscanf(str + 5, "%1d", &b);//6番目の数字があるアドレスを指定して、1文字だけ数値として読み取る printf("%d\n", a + b); } のプログラムの%1dってなんですか? また、sscanf(str + 2, "%1d", &a)は3番目の数字があるアドレスを指定して、1文字だけ数値として読み取るのような働きをするのですか? sscanfは文字としての2を数字としての2に変える働きもあるのでしょうか? どこで文字としての2が数字としての2になったのか、どうか詳しく教えて下さい。 本で読んだときはあるアドレスからヌルになるまでを収納すると聞きました。なぜ限定的に1文字だけ数値として扱えるのでしょうか?
質問日時: 2021/02/21 15:33 質問者: captain06
ベストアンサー
7
0
-
#include <stdio.h> int main(void) { char str[] = "
#include <stdio.h> int main(void) { char str[] = "0123456789"; int i = 0; int num = 0; int num2 = 0; int num3 = 0; int num4 = 0; num = atoi(str); //文字としての0ではなく、数値としての0を表示するには? printf("str[i] = '%d'\n", str[4]-48); printf("*(str + i) = '%c'\n", *(str + i)); printf("&str[i] = %p\n", &str[i]); printf("str + i = %p\n", str + i); printf("&*(str + i) = %p\n", &*(str + i)); printf("int型変数numの値は: %d\n", num); i = i + 3; num2 = atoi(str[i]); i = i + 3; num3 = atoi(str[i]); num4 = num2 + num3; printf("int型変数num4の値は: %d\n", num4); } において、2+5をしてら7をnum4で表示したいのですが、なぜか表示されません。 どなたか原因はわかりますでしょうか? あるいはなにが足りないのでしょうか?
質問日時: 2021/02/21 13:32 質問者: captain06
ベストアンサー
2
0
-
苦しんでCを読んでchar型は文字列しか表せないとわかっていますが、 例えばchar str[] =
苦しんでCを読んでchar型は文字列しか表せないとわかっていますが、 例えばchar str[] = "0123456789";を文字としての123456789ではなく数値としての123456789として表示することは可能なのでしょうか? 多分、char型をint型に変えるなどしないといけないのかなとは思っています。
質問日時: 2021/02/21 10:56 質問者: captain06
ベストアンサー
7
0
-
char* p char p &pの違は char *pはポインタでアドレスを指定したり扱う。(その
char* p char p &pの違は char *pはポインタでアドレスを指定したり扱う。(その後はpと置くだけでアドレスを扱える。) char pはただのpという文字や文字列を扱う変数 &pはchar *pで扱われたアドレスをprintfなどで表示するさいに使わられる。 であるため、 また、char* p = strchr(str, '\0');で、なぜ以下のプログラムでchar *pかというと関数strchr(str, '\0');の返り値のアドレスを得るためですね #include <stdio.h>#include <string.h>int main(void) { char str[] = "12345""\0""67890" ; char* p = strchr(str, '\0');//★strchr関数によりchar* pはポインタpとして扱われ、上と同じような処理になる //しかしstrchr関数によりchar* pでありながらポインタのアドレス、ではなくアドレスの指す数値を扱うというのに違和感があります。 //これはstrchr関数がそういうものだからと納得するしかないのでしょうか? printf("|%s|\n", str); printf("|%s|\n", p + 1); *p = '!'; printf("|%s|\n", str); } 合っているでしょうか?
質問日時: 2021/02/19 03:41 質問者: captain06
ベストアンサー
5
0
-
#include <stdio.h> #include <string.h>int main(voi
#include <stdio.h> #include <string.h>int main(void) { char str[] = "12345""\0""67890"; char* p = strchr(str, '\0');//★strchr関数によりchar* pはポインタpとして扱われ、上と同じような処理になる //しかしstrchr関数によりchar* pでありながらポインタのアドレス、ではなくアドレスの指す数値を扱うというのに違和感があります。 //これはstrchr関数がそういうものだからと納得するしかないのでしょうか? printf("|%s|\n", str); printf("|%s|\n", p + 1); *p = '!'; printf("|%s|\n", str); } をcやc++でデバックしたら、char* p = strchr(str, '\0');の部分がcharと*pになると思ったらchar*とpに分かれていました。 理由がわかりません。 どなたかわかる方はいますでしょうか? また、char*型とはポインタ型のcharだとわかりました。しかし、だからなんだという感じで、ポインタ型のcharとはなんなのですが? どうか基礎を固めたいのでどうかよろしくお願い致します。
質問日時: 2021/02/19 01:51 質問者: captain06
ベストアンサー
3
0
-
#include <stdio.h> #include <string.h> int main(vo
#include <stdio.h> #include <string.h> int main(void) { char str[] = "12345""\0""67890", * p;//★ここでpを先頭のアドレスの文字コードを扱う定義にした。 //しかしなぜこのように書けたのか正直わかりません。というのもchar str[]は「文字列の文字コード」のデータを扱う //わけじゃないですか。ってことは* p自体もアドレスではなくアドレスの「先頭の文字コード」のデータを扱うため //これでもうまくいくのかなと自己解釈しています。 p = strchr(str, '\0');//strchrを扱う際はstrの文字列の先端のアドレスが入る。そして、アドレスを+1していき //'\0'を見つけたら、その'\0'のアドレスをポインタpに渡す。 printf("|%s|\n", str);//文字列の最初のアドレスから'\0'となった部分までがstrにとなるので //printfより先頭のアドレスから'\0'までの文字列が入る。そして表示される。 printf("|%s|\n", p + 1);//そのポインタpが(printfのp + 1により)+1されたことで'\0'が今現在の //ポインタの指すアドレスとなり、そのアドレスからnullまでを表示した。 *p = '!';//そして、今現在のポインタが指すアドレスは'\0'になったアドレスであるため、 *p = '!' //により'\0'は'!'に置き換えられた。 printf("|%s|\n", str);//そのため結果が|12345!67890|となる。 } //以下は元のプログラムです。 /*#include <stdio.h> #include <string.h> int main(void) { char str[] = "12345""\0""67890"; char* p = strchr(str, '\0');//★strchr関数によりchar* pはポインタpとして扱われ、上と同じような処理になる //しかしstrchr関数によりchar* pでありながらポインタのアドレス、ではなくアドレスの指す数値を扱うというのに違和感があります。 //これはstrchr関数がそういうものだからと納得するしかないのでしょうか? printf("|%s|\n", str); printf("|%s|\n", p + 1); *p = '!'; printf("|%s|\n", str); }*/ 黒い星が付いている部分が自信がない疑問部分です。リファレンスを読みましたが疑問が残りました。 どうかよろしくお願いします。
質問日時: 2021/02/18 18:01 質問者: captain06
ベストアンサー
1
0
-
#include <stdio.h> #include <string.h>int main(voi
#include <stdio.h> #include <string.h>int main(void) { char str[] = "12345""\0""67890"; char* p = strchr(str, '\0'); printf("|%s|\n", str); printf("|%s|\n", p + 1); *p = '!'; printf("|%s|\n", str); } 上のプログラムの char* p = strchr(str, '\0'); のpに*がついていますが、これはpに掛かっているのではないですよね? 個人的にヌルになる手前から最初の文字列の先頭のアドレスが渡せれば良いと考えたので char p = strchr(str, '\0');で良いとしましたがエラーが起きます。 なぜ今回char*が必要なのでしょうか? strchrのせいでしょうか?なぜstrchrを使うだけ*pになるのか知りたいです。
質問日時: 2021/02/18 15:21 質問者: captain06
ベストアンサー
5
0
-
char * p char *pは何が違うのでしょうか また、#pragma warning(dis
char * p char *pは何が違うのでしょうか また、#pragma warning(disable: 4996) #include <stdio.h> // puts, printf #include <string.h> // strcpy, strtok int main() { const char* str = "abc:123\n,tdef:45,ghi:678."; char buf[1024], * p; strcpy(buf, str); puts("-- \",\\t\\n\" --"); p = strtok(buf, ",\t\n"); while (p) { printf("[%s]\n", p); p = strtok(NULL, ",."); } }について、abc:123\n,.tdef:45,.ghi:678.でないのになぜ、 [abc:123] [tdef:45] [ghi:678] となるのかわかりません。
質問日時: 2021/02/18 13:13 質問者: captain06
ベストアンサー
1
0
-
#pragma warning(disable: 4996) #include <stdio.h>/
#pragma warning(disable: 4996) #include <stdio.h>// puts, printf #include <string.h>// strcpy, strtok int main() { const char* str = "abc:123\n,tdef:45,ghi:678."; char buf[1024], * p; strcpy(buf, str); puts("-- \"\\n\"--"); p = strtok(buf, "\n"); while (p) { printf("[%s]\n", p); p = strtok(NULL, "\n"); } strcpy(buf, str); puts("-- \"\t\"--"); p = strtok(buf, "\t"); while (p) { printf("[%s]\n", p); p = strtok(NULL, "\t"); } strcpy(buf, str); puts("-- \",\"--"); p = strtok(buf, ","); while (p) { printf("[%s]\n", p); p = strtok(NULL, ","); } strcpy(buf, str); puts("-- \",\\t\\n\"--"); p = strtok(buf, ",\t\n"); while (p) { printf("[%s]\n", p); p = strtok(NULL, ",."); } } //puts("-- \"\t\"--");について、なぜ文字列に\tがないのに //[abc:123] //[, tdef:45, ghi : 678.]ではなく、 //[abc:123 //, tdef : 45, ghi : 678.]なのでしょうか? また、strtok(NULL, ",."); }とは何をしているのでしょうか?文字列に",."は含まれていないのになぜこれが必要なのかわかりません。
質問日時: 2021/02/18 09:22 質問者: captain06
ベストアンサー
4
0
-
#include <stdio.h> #include <string.h> int main(vo
#include <stdio.h> #include <string.h> int main(void) { char str[] = "str == NULL ? \"(NULL)\" : str"; char* p, * q; int ch; p = str; for (;;) { for (q = p; !(*q == '?' || *q == ':' || *q == 0); q++); ch = *q; *q = 0; printf("|%s|\n", p); if (ch == 0) break; p = q + 1; } } ``` のコードについてデバッグをして中身を確認したかったため 以下のように置いて ``` ```ここに言語を入力 #include <stdio.h> #include <string.h> int main(void) { char str[] = "str == NULL ? \"(NULL)\" : str"; char *p, *q; int ch; p = str; printf("before loop\n"); printf(" str = |%s|\n", str); printf(" p = |%s|\n", p); for (;;) { printf("loop start\n"); printf("--before inner loop\n"); printf(" str = |%s|\n", str); printf(" p = |%s|\n", p); for (q = p; !(*q == '?' || *q == ':' || *q == 0); q++) ; printf("--after inner loop\n"); printf(" str = |%s|\n", str); printf(" p = |%s|\n", p); printf(" q = |%s|\n", q); ch = *q; *q = 0; printf("--after *q = 0\n"); printf(" str = |%s|\n", str); printf(" p = |%s|\n", p); printf(" q = |%s|\n", q); printf("|%s|\n", p); if (ch == 0) break; p = q + 1; printf("--after p = q + 1\n"); printf(" str = |%s|\n", str); printf(" p = |%s|\n", p); printf(" q = |%s|\n", q); printf("loop end\n\n"); } printf("after loop\n"); printf(" str = |%s|\n", str); printf(" p = |%s|\n", p); printf(" q = |%s|\n", q); } ``` 以下のように出力が出ました。 ``` before loop str = |str == NULL ? "(NULL)" : str| p = |str == NULL ? "(NULL)" : str| loop start --before inner loop str = |str == NULL ? "(NULL)" : str| p = |str == NULL ? "(NULL)" : str| --after inner loop str = |str == NULL ? "(NULL)" : str| p = |str == NULL ? "(NULL)" : str| q = |? "(NULL)" : str| --after *q = 0 str = |str == NULL | p = |str == NULL | q = || |str == NULL | --after p = q + 1 str = |str == NULL | p = | "(NULL)" : str| q = || loop end loop start --before inner loop str = |str == NULL | p = | "(NULL)" : str| --after inner loop str = |str == NULL | p = | "(NULL)" : str| q = |: str| --after *q = 0 str = |str == NULL | p = | "(NULL)" | q = || | "(NULL)" | --after p = q + 1 str = |str == NULL | p = | str| q = || loop end loop start --before inner loop str = |str == NULL | p = | str| --after inner loop str = |str == NULL | p = | str| q = || --after *q = 0 str = |str == NULL | p = | str| q = || | str| after loop str = |str == NULL | p = | str| q = || ``` 0. ただなぜ途中から str の中身が |str == NULL |のみになったのかわかりません。 自分なりに考えたのですが ポインタqがq=0よりforの条件に入る部分の先頭の文字からNULLまでを要は、 |str == NULL ? "(NULL)" : str|の? "(NULL)" : strを消してしまったため、 そして、ポインタP= |str == NULL |が残っている。。。いや自信がないです。なぜstr の中身が |str == NULL |のみになったのでしょうか? またどうやって "(NULL)" : str|は残っていたのでしょうか?
質問日時: 2021/02/16 17:15 質問者: captain06
ベストアンサー
5
0
-
&(*p)の値は、ポインタ先の値へのポインタです。 つまり、ポインタと同じアドレスを示しますが、なぜ
&(*p)の値は、ポインタ先の値へのポインタです。 つまり、ポインタと同じアドレスを示しますが、なぜ*をつける必要があるのですか? また、&*(str+i)もポインタと同じアドレスを示しますが、なぜ*をつける必要があるのですか? 詳しく丁寧に教えてください。
質問日時: 2021/02/16 14:55 質問者: captain06
ベストアンサー
1
0
-
``` #include <stdio.h> #include <string.h> int mai
``` #include <stdio.h> #include <string.h> int main(void) { char str[] = "str == NULL ? \"(NULL)\" : str"; char* p, * q; int ch; p = str; for (;;) { for (q = p; !(*q == '?' || *q == ':' || *q == 0); q++); ch = *q; *q = 0; printf("|%s|\n", p); if (ch == 0) break; p = q + 1; } } ``` のプログラムをデバッグした際に char str[] = "str == NULL ? \"(NULL)\" : str"; の中身は "str == NULL ? \"(NULL)\" : str" 一回目のループで中身はstr == NULL ? \"(NULL)\" : str、二回目のループでstr == NULL 三回目のループでstr == NULLとなんだか想像したのと違った結果になります。 なぜでしょうか? そして、 こちらのプログラムでは ``` #include <stdio.h> int main(void) { char str[] = "abcde" ; for (char* p = str; *p; ++p) { ++(*p); printf("%s\n", &(*p)); } } ``` str[]の中身はforループによって以下のように変化します。 **char* p = str[]より、str[]の中身はpに代入しているためstr[]に影響はないと思ったのですが。** 最初はchar str[] = { "abcde" };の中身はabcdeでしたが、一回目のループでbbcde、二回目でbccde、三回目bcdde 四回目bcdee ``` bbcde ccde dde ee f ```
質問日時: 2021/02/16 04:59 質問者: captain06
ベストアンサー
2
1
-
#include <stdio.h> int main(void) { char str[] = {
#include <stdio.h> int main(void) { char str[] = { "abcde" }; for (char* p = str; *p; ++p) { ++(*p); printf("%s\n", &(*p)); } } 結果は bbcde ccde dde ee f ただなんでこのような結果になるのか自分で書いて置きながらわからないので、自分なりに解説すると同時に疑問点を上げていきます。 まずchar* p = strより、strに入っている文字列abcdeをchar* p により、ポインタpの指すアドレスの番号ではなく、アドレスに入っている文字列abcde(文字コード)が渡される。そして、for文の++pにより文字列のアドレスに入っている文字コードの数値が+1されるのでポインタpが先頭のアドレスから表す文字列はbcdeとなる、それから*pには文字コードが一つしか入らないようなので、「b」だけが入る、そして、なぜかデバッグの結果より[0]に*pに代入されたbが代入され、 strの中身の数列はbcdeとなっているので、なんで[6]にbが代入されないのかわからないですが、*pに代入されたbが代入されたbが[0]として、bbcdeとなりました。 疑問1 なぜ*pには文字コードが一つしか入らないのか。 疑問2 なぜ[0]に*pに代入されたbが代入されたのか、個人的には文字列は最後に表示するためてっきりbcdebだと思っていました。
質問日時: 2021/02/16 03:54 質問者: captain06
ベストアンサー
6
0
-
&str[i]のアドレスを上げながらメモリに入った数値をそれぞれの値を+1したいのですが、アドレスと
&str[i]のアドレスを上げながらメモリに入った数値をそれぞれの値を+1したいのですが、アドレスと中身の数値を別々にインクリメントするプログラムの書き方がわかりません。 どうかご教示お願いします。 また、 for( char *p=str; *p; ++p ) { ++(*p); } ポインタpのアドレスに入った数値は++pにより増えて、さらに++(*p)の++によりさらに増えるわけですか? 違う場合は コードの処理過程をわかりやすく教えてください。 もう一つ、 char *p = &(str[0]); とはポインタの指す([0]の)アドレスの番号をポインタpの数値の列として代入するという意味でしょうか? 違うならば処理の過程を詳しく教えてください。
質問日時: 2021/02/16 01:43 質問者: captain06
ベストアンサー
1
0
-
str[i] と*(str + i) および &str[i] と str + iと&*(str +
str[i] と*(str + i) および &str[i] と str + iと&*(str + i) は同じですか? 仮にiを+1していくとして、 iが+1されるとstr[i]のポインタのアドレス自体ではなく、 アドレスに入っているメモリの値が+1され、 iが+1されるとつぎのアドレスに移行すると聞いたのですが、それは上の5つのうちどれですか? また、が+1されるとstr[i]のポインタのアドレス自体ではなく、 アドレスに入っているメモリの値が+1され、のは5つのうちどれですか?
質問日時: 2021/02/15 15:30 質問者: captain06
ベストアンサー
1
0
-
str[i] は *(str + i) と同義です。なので iが変化すれば、当然ながら str+i
str[i] は *(str + i) と同義です。なので iが変化すれば、当然ながら str+i は変化します。 # strは変化してません、固定値です。といわれたのですがか、 ですが、&str[i] はアドレスの指す配列を表すので変数iで繰り上げてアドレスを上げるのに、なぜstr[i]だけなのですか?str[i]だけではアドレスの数値を上げられないと思います。 書くならば、(&str + i) ではないのでは?と思いました。
質問日時: 2021/02/15 13:05 質問者: captain06
ベストアンサー
3
0
-
仮に&str[i]のアドレスを上げながらメモリに入った数値をそれぞれの値を+1したい場合は どう書け
仮に&str[i]のアドレスを上げながらメモリに入った数値をそれぞれの値を+1したい場合は どう書けばよいのでしょうか? ++str[i++] または str[i++]++ for ( ... ;str[i]++, i++) の方が明快か。 と解答を頂いたのですが、 補足になってしまい申し訳ないですが、 例えば、*p は str[i]より、ループ三周目のアドレスの指す数値を知りたいときは if (i == 3){ printf("%d\n", str[3]);};と書けばいいのでしょうか? 仮に*p は str[i]よりよりprintf("%d\n", str[3]);の部分のstr[3]のように書くにはどう書けばいいのでしょうか?if (i == 3){ printf("%d\n", *p ==3);};でしょうか? もう一つ、「仮に&str[i]のアドレスを上げながらメモリに入った数値をそれぞれの値を+1したい場合は どう書けばよいのでしょうか? ++str[i++] または str[i++]++ for ( ... ;str[i]++, i++) の方が明快か。と言われたのですが、 アドレスとアドレスの指すメモリの数値を上げるならば、++str[i++] または str[i++]++に&を付けてアドレスとアドレスの指すメモリに入る数値を同時にあげる書き方はないのでしょうか?(なぜ&をつけていないのにアドレスも上がるのか疑問です。) 要は++&str[i++] または &str[i++]++という書き方はないのでしょうか? ただ、アドレスを上げながらアドレスの指すメモリに入った数値を上げる書き方が ++str[i++] または str[i++]++と決まっているならば従うしかないですが。
質問日時: 2021/02/15 01:54 質問者: captain06
ベストアンサー
1
0
-
ちなみに、for (i = 0; str[i] != 0; str[i++])のstr[i] !=
ちなみに、for (i = 0; str[i] != 0; str[i++])のstr[i] != 0;は値がstr[i]に数値の0が入るまでstr[i++]、すなわち、&str[i]のアドレスの指定するメモリの数値を+1するという事でしょうか? 仮に&str[i]自体のアドレスを+1して上げながらメモリに入った数値をそれぞれの&str[i]のアドレスのメモリに入った値を+1したい場合は どう書けばよいのでしょうか? 例題のプログラムを用いて説明して頂けるとありがたいです。 それとも、str[i]はポインタのアドレスに入る数値を表しますが、あるアドレス(例えばアドレス1)のメモリの数値しかあがりません。 では、ほかのポインタのアドレス(例えばアドレス2)のメモリの数値を上げたい場合は 新しくstrA[i]と作り、 for文で(*(&str))++と(*(&str A))++の二つを作ればよいのでしょうか? 出来ればプログラムを書いて頂けるとりかいしやすいです。
質問日時: 2021/02/15 00:55 質問者: captain06
ベストアンサー
1
0
-
CMakeでエラーが出ます
今回、初めてCMakeでC++のビルドを行っています。 実際、ビルドしてみると以下のエラーが出て、どうしたら良いかわかりません。 CMake Error at CMakeLists.txt:1: Parse error. Expected a command name, got unquoted argument with text "!<symlink>��.". ●CMakeLists.txt cmake_minimum_required(VERSION 3.0.0) project(ConvAccelTutorial) set(SOURCE_FILE main.cpp naive.cpp optimized.cpp) find_package(OpenCV REQUIRED) include_directories( ${OpenCV_INCLUDE_DIRS} ) add_executable( ${PROJECT_NAME} ${SOURCE_FILE} ) target_link_libraries( ${PROJECT_NAME} ${OpenCV_LIBRARIES} ) target_compile_options( ${PROJECT_NAME} PUBLIC -Wall -g -Ofast -march=native ) ご存知の方、教えて下さい
質問日時: 2021/02/14 09:18 質問者: matsu77
解決済
4
0
-
Processingのプログラム問題について
Processingについてです。 このプログラム問題について分かる方、いますでしょうか ①~⑧まで埋める問題になってます。
質問日時: 2021/02/12 23:36 質問者: Losteth89
解決済
1
0
-
コンボボックスの項目変更
C#です。 項目変更をプログラムからしても、画面上の表示はそのままです。 プルダウンメニューの表示を書き換える方法を教えてください。
質問日時: 2021/02/12 21:51 質問者: 7777777v
解決済
1
0
-
cin.peek() cin.ignore(100,'\n')
c++を勉強していて、cin.peekとcin.ignoreいうのが出てきました。自分で調べてみたのですがどうにも理解できませんでした。ざっくりでいいのでどのようなものなのか説明していただければ幸いです。
質問日時: 2021/02/12 06:14 質問者: yuuuuki1021
ベストアンサー
2
0
-
C# Windows form Application データグリッドビューに関する質問です。 Da
C# Windows form Application データグリッドビューに関する質問です。 DataGridView にPostgreSQLからデータを表示させています。 これを列をクリックで1行選択した場合、そのデータをテキストボックス等のコントロールに表示させたいです。 ※チェックボックスをつけると、見た目的にも分かり易いと思い1行目にチェックボックスを追加しました。 その状態でSQLのデータを表示させることはできましたが、チェックボックスをオンにするイベントが分からず、止まっています。 アドバイスお願いいたします。
質問日時: 2021/02/12 05:58 質問者: 0987654321adgjmptw
ベストアンサー
1
0
-
ドラッグしたファイル名を取得するCプログラム(LINUX)
ドラッグしたファイル名を取得するCプログラムはWindowsでは、 #include <stdio.h> int main(int argn, char *argv[]) { if(argn != 2) { printf("本プログラムにファイルをドラッグしてください\n"); return -1; } printf("ドラッグしたファイルは%sです\n",argv[1]); return 0; } で動作しますが、これと同じことがLINUX MINT でできる、プログラムの書き方がわかりません。 <症状> このプログラムをgcc でコンパイルしてできた a.out をターミナルから ./a.out hoge.dat すると ドラッグしたファイルはhoge.datです とwindows版と同じように表示されますが、 hoge.dat をa.out にドラッグしても何も起こりません。 C言語の問題というより、OSのインタフェースの違いということも承知していますが、こちらのカテに質問してみました。 よろしくお願いします。
質問日時: 2021/02/10 07:41 質問者: usa3usa
ベストアンサー
4
0
-
C言語のプログラムについての質問です
名前:A, B, Cの3人の身長を入力し、身長の低い人から順番に名前を出力して、同時に平均身 長を表示するプログラムを作りたいのですが、どう書けばよいかわからないです。 教えていただけると幸いです
質問日時: 2021/02/08 22:08 質問者: ぺんぎn
解決済
8
0
-
プログラミング(c言語)でのソートについての質問です。 「名前 国語の点数 数学の点数 理科の点数」
プログラミング(c言語)でのソートについての質問です。 「名前 国語の点数 数学の点数 理科の点数」 が15列分並んでいるファイルがあります。 これをプログラム内に読み込んで、数学の点数を降順に並び替えた(同点の場合理科の点数で並び替える)のを基準に、他のデータも入れ替えた結果を書き出すプログラムを作りたいのですが、数学の点数を入れ替えるときに他のデータも入れ替える方法が思い浮かびません、、、 どのような方法があるでしょうか??
質問日時: 2021/02/06 19:36 質問者: そらじろーのすけ
解決済
1
0
-
typedefの使い方
Cの構造体の定義で、 typedef struct Eyesight { int no; float right; float left; } Eyesight; と書いた場合、 Eyesightがstruct Eyesightに変換されると思うのですが、 タグ名無しで、 typedef struct { int no; float right; float left; } Eyesight; と書いた場合、 Eyesightは、struct { int no; float right; float left; } に変換されると思って良いのでしょうか?
質問日時: 2021/02/05 20:04 質問者: tmiyoshi
解決済
7
0
-
モバイルCで バッテリーの状態をCSVファイルに落としたい
androidのスマホでバッテリーの充電率をCSVファイルに落としたいと考えています。 現在のバッテリーのパーセントの状態を取得する関数を知りたいです。 そこで一定時間ごとに、その時の時間と充電率を1つ目のファイルにCSVファイルで取得することと 充電率が変化した時に、時分秒と充電率をCSVファイルに落としたいです。
質問日時: 2021/02/05 11:58 質問者: LHS07
解決済
1
0
-
C言語 バイナリファイルの読み込みとその後の処理について
プログラム初心者です。 写真等のファイルをバイナリデータで読み込んで暗号化の変換して出力したいと思っています。 ECBモードとかCBCモードのように 配列16バイト単位で暗号化の関数は作ったのですがどう読み込んで処理していいかわかりません。 #include <stdio.h> #include <stdlib.h> #include"test1.h" int main(){ int i,j; FILE* fp1,*fp2; unsigned char yomikomi[16]= {0}; //16バイト読み込み用(関数用でファイルから読み込む際に 使用していた) unsigned char key[16]= {0}; unsigned char syuturyoku[16]= {0}; //関数からの出力 unsigned char ioutput[16]; unsigned char buff[?][?]; // ファイルから読み込む16バイト分を格納する配列? fp1 = fopen( "syasin.jpg", "rb" ); if( fp1 == NULL ){ printf( "ファイルオープンに失敗しました。\n" ); exit( 1 ); } fread( test, sizeof(char), sizeof(test), fp1 ); } fclose(fp1); fp2 = fopen( "kekka", "wb" ); if( fp1 == NULL ){ printf( "ファイルオープンに失敗しました。\n" ); exit( 1 ); } ファイルサイズ分読み込んで for(i=0;i< ;i++){ kannsuu(yomikomi,key,syuturyoku); } 16バイトずつ読み込んで関数に入れて値を返す もしくは関数から出たものとまた処理を加えて繰り返す。 最後に結合してファイルに出力したいです。 その他疑問点:足りない場合はパディング?処理をしないと処理できない? ご教授よろしくお願いします。
質問日時: 2021/02/04 20:06 質問者: jenseits
ベストアンサー
2
0
-
#include <stdio.h> #include <string.h>int main(voi
#include <stdio.h> #include <string.h>int main(void){ char str[] = "str == NULL ? \"(NULL)\": str"; char *p, *q; int ch; p = str; for(;;){ for(q=p; !(*q=='?' || *q==':' || *q==0); q++) ; ch = *q; *q = 0; printf("|%s|\n", p); if(ch==0) break; p = q+1; } } において、 なぜprintf("|%s|\n", *p);では駄目なのかわかりません。 ポインタに入ったメモリに保存された文字にしかprintfは対応していないためでしょうか?(そういう仕様なのでしょうか?) やはりポインタを使わないと printf で文字や文字列を表できるのでしょうか? また似たようなプログラムにおいて、別のプログラムなのですが。 #include <stdio.h>#define STR "Kitty on your lap"int main() { int i , j; printf("Kitty on your lap%n\n", &i); printf("%nKitty on your lap\n", &j); printf("i = %d , j = %d", i , j); return 0; } において、 printf("Kitty on your lap%n\n", &i);とありますが、例題より、p は &str[0] (アドレス)より、&iはポインタですが、やはりポインタを使わないとの数値を表示できないのでしょうか? 最後に文字や文字列をのアドレスをprintfに渡す場合はポインタpと書き、iなどの数値などのアドレスを表す場合は &i のように書くのですか? 基礎的な質問ですが、是非細かく 詳しく教えて頂きたいです。 でもprntfはポインタなしでも文字を表示できますよね。なのに何故ポインタを使わないと文字や文字列が表示できないのか、、、 混乱してきました。
質問日時: 2021/02/04 18:18 質問者: captain06
ベストアンサー
6
0
-
C# 二次元配列 ドット絵の表示について
現在C#でプログラミング基礎から学んでいる文系のモノです。 Paizaラーニング上でC#入門編を行っており、 その中の、二次元配列の講座の部分で理解できなかった点があり質問させていただきます。 string[][] areaMap = new string[5][]; for (int i = 0; i < areaMap.Length; i++) { areaMap[i] = new string[10]; } for (int i = 0; i < areaMap.Length; i++) { for (int j = 0; j < areaMap[i].Length; j++) { if(i % 2 == 0 && j % 2 == 0) { areaMap[i][j] = "+"; } else { areaMap[i][j] = "."; } Console.Write(areaMap[i][j]); } Console.WriteLine(); } 上記のコードは、下記のドット絵を表示する処理になっております。 +.+.+.+.+. . . . . . . . . . . +.+.+.+.+. . . . . . . . . . . +.+.+.+.+. 私のイメージとしては、上記のドット絵は下記のような、配列で表示されていると考えております。 i,j areaMap[0] = 0,0 0,1 0,2 0,3 0,4 areaMap[1] = 1,0 1,1 1,2 1,3 1,4 areaMap[2] = 2,0 2,1 2,2 2,3 2,4 areaMap[3] = 3,0 3,1 3,2 3,3 3,4 areaMap[4] = 4,0 4,1 4,2 4,3 4,4 今回理解できなかった点が、if(i % 2 == 0 && j % 2 == 0) この処理です。 i % 2 == 0 という部分は、横の列に対して指定しているという事は理解できていますが、 j % 2 == 0 という部分が、自分の考えている処理と違う為、 なぜこう表示されているのかいまいち理解が出来ていません。 私の考えでは、if(i % 2 == 0 && j % 2 == 0) この処理で表示されるドット絵は下記の様になると思っていました。 ++ .. ++ .. ++ . . . . .. .. .. ++ .. ++ .. ++ . . . . .. .. .. ++ .. ++ .. ++ 言語化するとすれば、iの部分で偶数列が指定され、 尚且つjも偶数の部分のみ+で表示すると解釈しました。 areaMap[0] = 0,0 0,2 0,4 areaMap[1] = areaMap[2] = 2,0 2,2 2,4 areaMap[3] = areaMap[4] = 4,0 4,2 4,4 長文での質問で申し訳ございません。 私の考え方が間違っていると思うのですが、どなたか今一度訂正及び、 ドット絵の表記がなぜ一番初めに先述したようなドット絵になるのか、 ご教授いただければ幸いです。
質問日時: 2021/02/04 12:54 質問者: big-D
解決済
2
0
-
ベストアンサー
4
0
-
【C/C++】読み取ったバイナリデータの値によって、処理を条件分岐させたい。
お世話になります。 あるファイルを展開するソフト(作者は別の方(連絡不可能))に機能を追加したいのですが、条件分岐のコードの記述方法があまり理解できていないので、詳しく教えていただきたいです。 ■ やりたいこと ※ fread関数やfseek関数などを使うのだろうという推測はしてます。 質問のタイトルの通りですが、詳しく書くと・・・ ・33~42byte目の所の値がFFで埋められていたら、Xの処理を実行する。 //--------- if(/*条件分岐のコード*/){ printf("Xの処理中・・・\n"); // Xの処理コードを記述予定 } //--------- ■ 現在できていること ・ファイルポインタの宣言。 ・ファイルをバイナリモードで開き、先頭64byteを読み込む。 初歩的な質問だと思うのですが、どうかよろしくお願い致します。
質問日時: 2021/02/03 21:46 質問者: _raven_
解決済
2
0
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
【C言語・C++・C#】に関するコラム/記事
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語
-
C言語の関数のextern宣言
-
【C言語】全角文字の配列を、全角の...
-
C#でログファイルにファイルパスが...
-
int16_t の _t は何?
-
DLLファイルの逆コンパイラについて...
-
C#でTreeViewのCheckBoxのサイズ変更
-
gccを行ってもexeファイルが生成さ...
-
3×3のラテン方陣をつくるプログラム...
-
大量のデータを読み込んで表示する...
-
visual studio 2022でのC#プログラ...
-
C言語について。
-
終端記号、非終端記号とは
-
C言語関数違いについて。
-
C言語 関数、変数の宣言について
-
C言語について(初心者)
-
あってる
-
C# で 数式文字列処理を処理する方法
-
C言語のことです。写真(見にくくて...
-
逆コンパイルと逆アセンブルの違い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
DLLファイルの逆コンパイラについて...
-
Windows Formアプリからコンソール...
-
大量のデータを読み込んで表示する...
-
C言語の関数のextern宣言
-
VisualStudioでC++クラスを追加する...
-
【C言語】全角文字の配列を、全角の...
-
VisualStudio2022でC言語プログラム...
-
C++でデスクトップGUIアプリ開発の...
-
gccを行ってもexeファイルが生成さ...
-
C#でTreeViewのCheckBoxのサイズ変更
-
C#でログファイルにファイルパスが...
-
プログラマー達は何故、プログラム...
-
逆コンパイルと逆アセンブルの違い...
-
Notepad++の関数リスト表示の変更方...
-
C言語について。
-
Cのコンパイルでコメントアウトをそ...
-
visual studio 2022でのC#プログラ...
-
コンソールアプリを作成するのにお...
-
C言語 バッファについて。
おすすめ情報