yama5140 の回答履歴
- テキストファイルが開けません。
main関数に2つの引数をとり、第1引数で指定したファイルの内容を第2引数で指定したファイルにコピーするプログラムを以下のように作りました。 #include<stdio.h> #include<fcntl.h> int main(int argc, char* argv[]){ int fd1, fd2, rs, ws; char buffer[10000]; if(argc!=3){ write(2, "使用法:実行ファイル コピー元ファイル コピー先ファイル\n", 54); exit(1); } fd1=open(argv[1], O_RDONLY); if(fd1<0){ fprintf(stderr, "can't open file '%s'.\n", argv[1]); exit(1); } fd2=open(argv[2], O_WRONLY|O_CREAT|O_TRUNC); if(fd2<0){ fprintf(stderr, "can't open file '%s'.\n", argv[2]); exit(1); } while((rs=read(fd1, buffer, 10000))>0){ if((ws=write(fd2, buffer, rs))!=rs){ write(2, "an error occurred while copying.\n"); exit(1); } } close(fd1); close(fd2); } コンパイル、実行ともに正常終了したのですが、 コピー先のテキストファイルを開こうとすると、 「アクセスは拒否されました。」というダイアログが表示されて 開くことができません。 なぜなのでしょうか。 よろしくお願いします。 ちなみにOSはWindows Vistaで、 プログラムはcygwin上で実行しました。
- テキストファイルが開けません。
main関数に2つの引数をとり、第1引数で指定したファイルの内容を第2引数で指定したファイルにコピーするプログラムを以下のように作りました。 #include<stdio.h> #include<fcntl.h> int main(int argc, char* argv[]){ int fd1, fd2, rs, ws; char buffer[10000]; if(argc!=3){ write(2, "使用法:実行ファイル コピー元ファイル コピー先ファイル\n", 54); exit(1); } fd1=open(argv[1], O_RDONLY); if(fd1<0){ fprintf(stderr, "can't open file '%s'.\n", argv[1]); exit(1); } fd2=open(argv[2], O_WRONLY|O_CREAT|O_TRUNC); if(fd2<0){ fprintf(stderr, "can't open file '%s'.\n", argv[2]); exit(1); } while((rs=read(fd1, buffer, 10000))>0){ if((ws=write(fd2, buffer, rs))!=rs){ write(2, "an error occurred while copying.\n"); exit(1); } } close(fd1); close(fd2); } コンパイル、実行ともに正常終了したのですが、 コピー先のテキストファイルを開こうとすると、 「アクセスは拒否されました。」というダイアログが表示されて 開くことができません。 なぜなのでしょうか。 よろしくお願いします。 ちなみにOSはWindows Vistaで、 プログラムはcygwin上で実行しました。
- Windows2000にてゲームの削除の仕方
お世話になります。 都合によりゲーム(ソリティア等)を削除したいのですが,アプリケーションの追加と削除にはありません。 それでEXEファイルを削除したのですが,削除したと思っても勝手に復活してしまいます。 どなたか削除方法をご存知ありませんか? (ちなみにWindows2000です。)
- ベストアンサー
- noname#88623
- Windows NT・2000
- 回答数3
- 誤作動の原因を教えてください
大学の課題で、あるプログラムを作成することになったのですが、実行しても意図したこととは違ってしか実行しなかったので、その原因と、どう修正すべきかを具体的に教えてください。 技術者向けというわけでもなさそうですが、C言語初心者の私には、小一時間考えてみても分からなかったので、お手柔らかに教えていただけると幸いです。 課題の内容は以下の通りです。 コンソールから入力した整数N以下のすべての素数を表示するプログラムを作成せよ。その際に次の点に配慮せよ。 ・2は素数である。 ・3は素数である。 ・4以上の偶数は素数ではない。 ・小さい方から割って、割り切れるかどうかを確認する場合に、素数かどうかを確認したい数の平方根より大きい数で割って確認する必要はない。 さらに、1行に10個の素数を印刷したら、改行するように改良できていたら加点する。 次に実際に私が作成したプログラムを載せます。 ソースをコピペしただけなので、コメント欄がそのまま表示されていたり字下げや改行が見にくくなっていたりしているとは思いますが、ご了承ください。 #include <stdio.h> #include <math.h> #define WIDTH 10 int main (int argc, const char * argv[]) { int i, j, k, n, flag; printf("自然数を入力してください\n"); scanf("%5d",&n); k = 1; printf(" 2"); //2は明らかに素数なので始めから表示するようにしておく。 for(i=3; i<=n; i+=2){ //3から調べていくが、偶数は明らかに素数ではないので奇数だけ調べていく。 flag = 0; for(j=1; j <= sqrt(i); j+=2){ //平方根以上の数で割って確認する必要はない。3以上の素数は奇数であるから偶数では割り切れない。 if(j != 1 && i%j == 0){ //もしもiが1以外で割り切れたら、 flag = 1; //素数ではないので終了する。 break; } if(flag == 0){ printf(" %5d",i); k++; if(k >= WIDTH){ printf("\n"); k=0; break; } } } } printf("\n"); return 0; } そして実行結果ですが、ここで問題が出てしまいました。 実際の実行結果は諸事情によりここでは載せられませんが、例えば20という数値を入力したときには、 自然数を入力してください 20 2 3 5 7 9 11 11 13 13 15 15 15 17 17 19 19 というようにディスプレイ上に出力されたわけです。 ご覧の通り、 (1)奇数が全て表示されてしまっている(素数ではない9や15が表示されている)。 (2)11以降の数が複数回表示されてしまっている。 (3)その上で1行に10個数が出力すると改行するようになっている。 という点が分かります。 ちなみに大学のPCの動作環境についてはよく分からないし、あまり公言はできませんが、OSはMacで、ソフトはXcodeのCommand Line Utility中のStandard Toolを利用しているということだけは言っておきます。 課題の締め切りは6月29日12時までとなっているので、それに間に合うように解答していただければ幸いです。よろしくお願いします。
- 至急お願いします
高専生です。 文字列で数字列を入力。 それを実数値に変換し そこから8進数に変換し 再び文字列とて出力したいです。 変換はできているのですが printf("%s",ss)が実行されると 正しい8進数の直後に文字化けまたは 0が出力されてしまい困っています。 例えば10進数の225は8進数では341ですが このプログラムでは出力が341'0'と0が付きます 同様に10進数12345は8進数では30071ですが これでは30071'ヨ@0'と意味不明な文字化けが付きます どうか解決法をご教授ください! 以下自分が組んだプログラム ______________________________________________________ #include<stdio.h> #include<string.h> void main(){ char s[5],ss[100]; int i=0,num=0,keta,hex=0,j=1,cnt1=1,k,x; while(1){ printf("5桁以内の文字列を入力せよ\n"); scanf("%s",&s); keta=strlen(s); //桁をカウントさせる if(keta>5){ printf("文字数不正\n"); } else { break;//条件満たしたら次へ } } while(1){ //桁数から1の倍数の数字を作ります 次のループのギミック j=j*10; cnt1++; if(cnt1>=keta){ break; } } while(1){ if(s[i]=='\0'){ break; } hex=s[i]-'0'; num=num+hex*j; j=j/10; ++i; //文字列で入力されたのを実数に直しました } printf("変換後=>%dです\n",num);//確認用表示 k=keta-1; for(;k>=0;k--){ int x=num%8; ss[k]='0'+x; num=num/8; } s[keta]='\0'; printf("%s%d",ss); ←ここです!!! return; }
- C言語 プログラミング 関数
文字列を引数とし、それをint型の整数に変換し戻り値として返す関数を作りたいんですが、どのように作ったらいいでしょうか? お願いします。
- ベストアンサー
- tomato1414
- C・C++・C#
- 回答数6
- オペレーティングシステムファイルの保護
保護されたオペレーティングシステムファイルを表示しない、を選択したときに表示されるような保護ファイルを自分で作りたいのですが、どうすれば保護できますか?また、解除できますか? XPでお願いします。
- 締切済み
- sainte
- Windows系OS
- 回答数1
- テキストデータ 構造体 入出力
テキスト(何が入っているか分からない)データの内容を構造体に格納して、格納された構造体の内容を画面に表示するのは可能でしょうか? C言語でソフトはVCです。 宜しくお願いします。
- 締切済み
- noname#86836
- C・C++・C#
- 回答数3
- ポインタの問題です
学校の課題である文字列をポインタを使って逆順に表示するというプログラムを作ったのですが、「問題で引数で与えられた文字列を逆順とする関数を作成せよ.ただし文字数が最大256文字であると仮定して良い.」ということなんですが、課題が求めている答えと自分が作ったプログラムがあっているか確認お願いします。 #include <stdio.h> void reverseWord(char *str); void main(void) { char *str = "sapporo"; char *p, *q; printf("元: %s\n", str); p = q = str; while (*q != '\0') q++; printf("逆順:"); while (q >= p) putchar(*q--); printf("\n"); } よろしくお願いします。
- VBAで特定のシートを複数選択する方法
エクセルのマクロで複数のシートから特定の文字のみが入力されているシートを全て選択したいのですが、どのようにプログラムすればよいのでしょうか? 最近勉強し始めたばかりでVBAについての知識が乏しく、完全に行き詰ってしまいました。
- 締切済み
- kenken91
- Windows NT・2000
- 回答数1
- C言語のプログラミングで文字コードを表示する方法を教えてください。
ファイル名<sample-utf8.txt> 32 30 30 38 e5 b9 b4 35 e6 9c 88 32 37 e6 97 a5 0d 0a ef bc 92 ef bc 90 ef bc 90 ef bc 98 e5 b9 b4 ef bc 95 e6 9c 88 ef bc 92 ef bc 97 e6 97 a5 0d 0a e8 a8 88 e7 ae 97 e6 a9 9f e3 82 b7 e3 82 b9 e3 83 86 e3 83 a0 ef bc 91 テキストメモの文字を表示するプログラムをC言語で作りたいのですがわかりません。どなたかソースコードを教えていただけると助かります。よろしくお願いします。
- 締切済み
- eroica9000
- C・C++・C#
- 回答数2
- 碁石、順列
こんばんわ。 つい最近 別件で質問させていただいたばかりですが、 またプログラミングに関して 解決できないことがありまして ここに来ました(汗) タイトルの通りの問題なのですが、 何個かある碁石の中から いくつか取り出して、それを並べる には 何通りの順列がありうるかを算出するプログラムを 作りたいのですが、 たとえば 白が2個、黒が2個あったとして そこからランダムに3個とった場合について説明 させていただきます。 今書いているプログラムは、 ランダムに取り出してきた3個を choice[]という配列に格納します。 そして、順列ですから 重複してはいけないということで 今まで生成した順列にかぶるものがないか 確認できなければ いけないので、重複のないように、今までに選んだ3個の並びを stock[][]という二次元配列に格納していくようにしました。 ここが問題になっています。ここでバグがおきていて(私の 無知により間違った記述をしているためと思われますが、) for(i=0;i<5;i++){ for(j=0;j<3;j++){ stock[i][j] = choice[j]; } } printf("stock:%s\n",stock[0]); *stock[i][j]は、あらかじめ'E'で初期化をしております。 上記のように書きました。 これは、選択した3つが入ったchoice[j]を、stockの中に 同じものがないかを確認して、なければ代入する という感じで 書いたものです。 で、printf文は、stock[0]つまり stock[0][0]~stock[0][2] を表示させて、choiceと同じ3つが入っているか確認したかった ためなのですが、 choiceがWBB(白、黒、黒の意味)のとき stock:WBBEEEEEEEEEEEE と表示されてしまいます。 私は、stock:WBB となることを期待していたのですが。。。 で、たとえば次に選択した3つがBWBだとしたら 前にストックしたWBBとは違うから またstock[][]に代入する ことにして、 stock[1]が、BWB となるようにしたいのです。 そうやって貯めていければ、たとえば 上記のように 2回目に選択したとき、 choiceが stock[][]の中にあるものと、一致したら 重複順列だからカウントしない というようなことができるのですが、 そもそもstockへの入り方が期待したものと違い よくわからないことになっているものですから、 すべて、”一致していない”のほうを通ってしまい、 正常に実行できないでおります。 いったい、何を勘違いしており、どのようにすれば 解決できるのでしょうか(>_<) どなたかアドバイスいただけますでしょうか。 お手数ですが、よろしくお願いいたしますm(_ _)m
- ベストアンサー
- donntakosu
- C・C++・C#
- 回答数4
- 80~100、70~79、60~69、59以下の個数を出力したいのですが・・・
1~100の任意の個数を1次元配列に読み込み、80~100、70~79、60~69、59以下の個数をそれぞれ出力するプログラミングを作りたいのですが、 よくわかりません…出力例の様に表示しif等、簡単な文を使って何とかできないでしょうか?宜しくお願いします。 出力例) 80~100:1 70~79:0 60~69:1 59以下:3
- お願いします
int c(int x) { x = x + 3; { int t; t = 6; { int x; x = 6; t = x + t + 12; } return x + t; } } 上の関数の変数の名前替えだけが許されるという条件の下で,関数f の働き(すなわち,引数と戻り値の関係)を変えずに,上記の関数定義の4行目 { int x; x = 6; t = x + t + 12; } の(int x)を(int t) に変更して.必要最小限の変数の名前替えを施した関数定義を書け. 私はこのように定義していますので、正しいですか、「関数の変数の名前替えだけが許されるという条件の下で,関数f の働き(すなわち,引数と戻り値の関係)を変えずに」ってあまり理解できてないので、ご教授お願いいたします。 int c(int x) { x = x + 3; { int y; y = 6; { int t; t = 6; y = t + y + 12; } return x + y; } } }
- C言語に詳しい方、お願いします!
二重for文の特長を活かし、次のような表示を行うプログラムを書きなさい。 ※四角形からダイヤ型をくり貫いたような表示。 ただし、キーボード入力で数字を出力し、その数字の数が、横配列の■の最大値となるようにすること(この例の場合、出力した数字は7)。 つまりは、出力した数字に応じて、■とダイヤの大きさが変化する。
- 締切済み
- taka_alice
- C・C++・C#
- 回答数4
- どのようにすればいいですか?
10個の1桁の整数を入力して、その中から最も大きい数字を3つを 入力した順番通り出力するにはどのようにすればいいですか? #include<iostream> using namespace std; int main(void){ int b[10]; int a; for(int i=0; i<10; i++){ cin >> a; b[i]=a; } int i, j, temp; for (i = 1; i < 10; i++) { temp = b[i]; for (j = i; j > 0 && b[j-1] > temp; j--) b[j] = b[j -1]; b[i] = temp; } for(int i=0; i<3;i++){ cout << b[9-i]; } return 0; }
- ベストアンサー
- mutekisama
- C・C++・C#
- 回答数4
- レコード長を数えてくれる関数
ファイルの1行のバイトレコード長を知るには あるファイルの中身は以下に示す: α : 62,11, β : 60, ...... 目で見ても、そのファイルの1行の”バイトレコード長”がわからない。C言語でレコード長を調べるための関数はありますか?
- C言語 関数プロトタイプ宣言の引数に配列を入れたいのですが
関数プロトタイプ宣言(自作関数)の引数に、A[4][4]というような配列を入れたいのですが、コンパイル時にエラーでincompatibleといわれてしまいます。 A[0][0]からA[3][3]までを個別に引数に指定してもエラーになります。 良い方法は無いでしょうか?
- ベストアンサー
- mosimosi99
- C・C++・C#
- 回答数5