[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
次のプログラムを実行し、
結果と内容を詳しく説明せよ。#include<stdio.h>
#include<string.h>
main(){ char c[3];
char s1[]="abcdefghijklmnopqrstuvwxyz"
char s2 [100]; s2[0]='\0';
printf("s1 inital value:\"%s\"\n",s1)
printf("s2 inital value:\"%s\"\n",s2)
if cstrcmp(s1,s2)==0){ printf("s1==s2\n");}
else{printf("s!=s2\n");}
printf("Push ENTER to proceed.");
fgets(c,2,stdin); strcpy(s2,s1);
printf("s1 current value:\"%s\"\n",s1);
printf("s2 current value:\"%s\"\n",s2);
if(strcmp(s1,s2)==0) { printf("s1==s2\n");}
else{prinf("s1!=s2\n");} }
実行は出来ていますが、内容を詳しく説明できません。
タイプミスあったらごめんなさい
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2007年06月30日まで
[5]特になし
>>592 #include <iostream>
using namespace std;
int main() {
int ch,cnt;
FILE *tmpf=tmpfile();
if(tmpf==NULL) return 1;
cnt=1;
while( (ch=getchar()) != EOF ) {
if( ch=='\n') cnt++;
fputc(ch,tmpf);
}
rewind(tmpf);
while( cnt>10 ) {
ch=fgetc(tmpf);
putchar(ch);
if( ch=='\n') cnt--;
}
fclose(tmpf);
return 0;
}
>>607 - if cstrcmp(s1,s2)==0){ printf("s1==s2\n");}
+ if (strcmp(s1,s2)==0){ printf)"s1==s2\n2);}
かな
610 :
609:2007/06/29(金) 23:26:24
俺までタイプミスしてどうするよ
>>604 よくわかりませんが、1個ずれているような気がします。
>>608 やはりcntがオーバーフローしてしまいます。
>>611 if(i>21) i=11;→if(i>20) i=10;
他はしらね
607です。
課題なんですが、なんでENTERを押すと次が出てくるかなどを説明する
見たいです。
先生が言うには3つ書けと言っていました。
>>606 >>612 < こいつ口先だけでうっとうしいな。しかも間違っていないことを
さも自分はそうしない、それは俺的には間違っているみたいな。うざいね、こういうの。
論より証拠。ソース書いてお前の意見を示せよ。
>>606 tmpfile()が使えるからといって 使わなければいけない、自分で実装してはいけない
なんて法律はありません。自分は知ってますよ〜ってアピールならよそでやれ。
617 :
592:2007/06/29(金) 23:46:59
>>615 すみません。それを書いたのは両方自分です。
10000000000000000行のデータなので、自分の環境では確実に
オーバーフローすると思いましたが、間違っているのでしょうか。
何個も解答がでてるんだから、全部動かしてみて動くやつ採用すればいいじゃん
動かないアホ解答であれば無視しろ
なんで質問者が回答者にケチつけてるの?
619 :
592:2007/06/29(金) 23:51:24
>>618 すいません。回答していただいた人を無視したほうがここでは
礼儀に適っているのでしょうか。
以後機会がありましたら、そうします。
そんな行数のデータを標準入力でする意味が分からん。まぁ、改良すりゃ対処できるけどさ。
とりあえず条件が後出し後出しだったり、下手に条件を限定するのはやり辛い。
なんで質問者が回答者にケチつけ(られるレベルなのに丸投げし)てるの?
と脳内変換してください。ちょっと飲みすぎたかも
とりあえず、改行を数える部分を書き換えて対処するか。まぁ、それくらい自分でなんとかならんか?
こっちもやってみるが。
>>620 標準入出力ならリダイレクトで任意のファイルを与えることができるし
パイプラインでフィルターとして使うことも出来るからだと
先生は言っていました。
>>617 そのデータはお前の環境のどこに存在する?
行指向のデータということは少なくとも行区切り子の情報が1行ごとに1個存在するんだよな?
>>622 いえ、最初に回答していただいた
>>601で全く問題なさそうです。
そう書いておけばよかったかしら。
>>625 え?ええっ?そういう条件?最初の10行を飛ばせってこと???
>>607 fgets(c, 2, stdin); は主人の指示がでるまで待機するメイドの様態。
-―-
. ´ ` 、
' , i l ! ヽ ヽ
〈\ .〃/‐リノ ノリ)ヘヽ.\`
,' ヽ \ /,ィ'"|` f'!ヽト、!_ヽ! / ̄ ̄ ̄ ̄ ̄
l//, ゙{0))! ヒ1! ,l.!,. l、 | | |
' /l/` リl、"´ !7 イゝ| | < Push ENTER to proceed.
'´ l/_i_リ,! r__´ リ r‐ '、 |
'「 , ‐ゝ>r'l〉く.、 {` ト、 \_____
く,`l ,.`Kト〉ヾ ヽ,TT.ソ
ゝL ヾ.l、〉,!、' ` ' }/
,. -\ ヽ'ヽ 〉ーr'
! ー〉 ヽ __/ | |
`>/ 》ー-‐'l | |
く./ くj l} | |
// 「i. k | |
,.' / >! l} | |
j / r'j i1 | |
^!,' k1 k' | |
630 :
592:2007/06/29(金) 23:58:57
そういうことか、いやすまん、0〜9を繰り返し入力してて気づかなかった orz
632 :
592:2007/06/30(土) 00:01:10
>>629 出力がちょうど10行分遅延しますが、全部出てくれるようですので
問題ありません。
>>629 実行なんかしなくていいからよく読め
あれくらい読めないと(コーダーとして使い捨ての駒として働くのに)困るぞ
>>607 fgets(c, 2, stdin); を scanf("%s", c); に変えてみると、
ENTERを押しても処理は進まない。
これはfgetsが、scanfなら食べ残す改行コード'\n'(コマンドプロンプトでENTERを押すと発生)
も食べてしまう卑しい輩であるから。
>>633 うるせーよ偉そうに、実行してみりゃ分かるだろ。入力の合間に出力だろ?
それで良いならそれでやってるわボケが うぜぇよ tmpfile()野郎w
>>607 fgets(c, 2, stdin); 以降に次の処理が書かれているから。
633 名前:デフォルトの名無しさん 投稿日:2007/06/30(土) 00:04:20
>>629 実行なんかしなくていいからよく読め
あれくらい読めないと(コーダーとして使い捨ての駒として働くのに)困るぞ
あれくらい読めないと(コーダーとして使い捨ての駒として働くのに)困るぞ
あれくらい読めないと(コーダーとして使い捨ての駒として働くのに)困るぞ
↑三流プログラマーでも下を見て偉そうな態度がとれるという典型的な例w
tmpfile()野郎は
>>592じゃなかったのか
↓だからうるせーつってんだろ?必死だなw
[1] 授業単元:C++言語
[2] 問題文(含コード&リンク):
以下のような形式で書かれた入力を標準入力から読み込み、それに従って
ディレクトリツリーをカレントディレクトリ上に構成せよ。
etc
usr
bin
include
sys
lib
この例では
etc
usr
usr/bin
usr/include
usr/include/sys
usr/lib
といったディレクトリをカレントに作成する。
インデントはタブでなされているものとする。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 7/6
[5] その他の制限: とくになし
お願いします。
607です
ありがとうございます。
fgets(c, 2, stdin); 以外にもありませんか?
642 :
9356:2007/06/30(土) 00:49:07
[1] 授業単元: C言語
[2] 問題文
クイズ形式で問題を10問作ってくること
『タイトル名』
クイズの説明文
1、問題文
2、四つの選択方式
3、答え
4、次の問題
5、1〜4の繰り返し
これを10問
[3] 環境
[3.1] OS:vista
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:7月8日まで
[5] その他の制限:printfなどの初歩的に簡単な方法、ランダム形式の必要無し。
以上で願いします。
>>607 #include <stdio.h>
#include <string.h>
int main(void){
char c[3]; // fgets用の捨て駒、体が目当て
char s1[] = "abcdefghijklmnopqrstuvwxyz"; // 比較用の文字列その1
char s2 [100]; // 比較用の文字列その2
s2[0] = '\0'; // この行を省略すると色々たのしい
printf("s1 inital value:\"%s\"\n", s1); // 文字列その1の内容を出力
printf("s2 inital value:\"%s\"\n", s2); // 文字列その2の内容を出力
if(strcmp(s1, s2) == 0) // 文字列その1とその2の内容が等しいか(「等しい」の定義については略)
printf("s1 == s2\n"); // 等しい場合の処理
else
printf("s != s2\n"); // 異なる場合の処理
printf("Push ENTER to proceed."); // これがないと何をしていいのかわからなくなる
fgets(c, 2, stdin); // 俺がいないと何もできないお前
strcpy(s2, s1); // 文字列その1の内容をその2に複写(「複写」の定義については略)
printf("s1 current value : \"%s\"\n", s1); // 以下略
printf("s2 current value : \"%s\"\n", s2);
if(strcmp(s1, s2) == 0)
printf("s1 == s2\n");
else
printf("s1 != s2\n");
return 0;
}