C/C++の宿題を片付けます 91代目

このエントリーをはてなブックマークに追加
607デフォルトの名無しさん
[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]特になし
608デフォルトの名無しさん:2007/06/29(金) 23:24:32
>>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;
}
609デフォルトの名無しさん:2007/06/29(金) 23:25:25
>>607
- if cstrcmp(s1,s2)==0){ printf("s1==s2\n");}
+ if (strcmp(s1,s2)==0){ printf)"s1==s2\n2);}
かな
610609:2007/06/29(金) 23:26:24
俺までタイプミスしてどうするよ
611デフォルトの名無しさん:2007/06/29(金) 23:30:35
>>604
よくわかりませんが、1個ずれているような気がします。
612デフォルトの名無しさん:2007/06/29(金) 23:31:31
>>608
やはりcntがオーバーフローしてしまいます。
613デフォルトの名無しさん:2007/06/29(金) 23:35:51
>>611
if(i>21) i=11;→if(i>20) i=10;
他はしらね
614デフォルトの名無しさん:2007/06/29(金) 23:36:59
607です。
課題なんですが、なんでENTERを押すと次が出てくるかなどを説明する
見たいです。
先生が言うには3つ書けと言っていました。
615デフォルトの名無しさん:2007/06/29(金) 23:40:17
>>606 >>612 < こいつ口先だけでうっとうしいな。しかも間違っていないことを
さも自分はそうしない、それは俺的には間違っているみたいな。うざいね、こういうの。
論より証拠。ソース書いてお前の意見を示せよ。
616デフォルトの名無しさん:2007/06/29(金) 23:45:36
>>606
tmpfile()が使えるからといって 使わなければいけない、自分で実装してはいけない
なんて法律はありません。自分は知ってますよ〜ってアピールならよそでやれ。
617592:2007/06/29(金) 23:46:59
>>615
すみません。それを書いたのは両方自分です。
10000000000000000行のデータなので、自分の環境では確実に
オーバーフローすると思いましたが、間違っているのでしょうか。
618デフォルトの名無しさん:2007/06/29(金) 23:50:12
何個も解答がでてるんだから、全部動かしてみて動くやつ採用すればいいじゃん
動かないアホ解答であれば無視しろ
なんで質問者が回答者にケチつけてるの?
619592:2007/06/29(金) 23:51:24
>>618
すいません。回答していただいた人を無視したほうがここでは
礼儀に適っているのでしょうか。
以後機会がありましたら、そうします。
620デフォルトの名無しさん:2007/06/29(金) 23:51:30
そんな行数のデータを標準入力でする意味が分からん。まぁ、改良すりゃ対処できるけどさ。
とりあえず条件が後出し後出しだったり、下手に条件を限定するのはやり辛い。
621デフォルトの名無しさん:2007/06/29(金) 23:51:50
なんで質問者が回答者にケチつけ(られるレベルなのに丸投げし)てるの?
と脳内変換してください。ちょっと飲みすぎたかも
622デフォルトの名無しさん:2007/06/29(金) 23:54:38
とりあえず、改行を数える部分を書き換えて対処するか。まぁ、それくらい自分でなんとかならんか?
こっちもやってみるが。
623デフォルトの名無しさん:2007/06/29(金) 23:54:51
>>620
標準入出力ならリダイレクトで任意のファイルを与えることができるし
パイプラインでフィルターとして使うことも出来るからだと
先生は言っていました。
624デフォルトの名無しさん:2007/06/29(金) 23:55:22
>>617
そのデータはお前の環境のどこに存在する?
行指向のデータということは少なくとも行区切り子の情報が1行ごとに1個存在するんだよな?
625デフォルトの名無しさん:2007/06/29(金) 23:55:53
>>622
いえ、最初に回答していただいた>>601で全く問題なさそうです。

そう書いておけばよかったかしら。
626デフォルトの名無しさん:2007/06/29(金) 23:57:26
>>625
え?ええっ?そういう条件?最初の10行を飛ばせってこと???
627デフォルトの名無しさん:2007/06/29(金) 23:57:55
>>626
>>601をよく読めよ
628デフォルトの名無しさん:2007/06/29(金) 23:58:21
>>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' | |
629デフォルトの名無しさん:2007/06/29(金) 23:58:23
>>627
>>601を実行して標準入力でやってみろよ
630592:2007/06/29(金) 23:58:57
>>626
違います。
試しに>>601のコードをコンパイルして実行なさってみてください。
631デフォルトの名無しさん:2007/06/30(土) 00:00:51
そういうことか、いやすまん、0〜9を繰り返し入力してて気づかなかった orz
632592:2007/06/30(土) 00:01:10
>>629
出力がちょうど10行分遅延しますが、全部出てくれるようですので
問題ありません。
633デフォルトの名無しさん:2007/06/30(土) 00:04:20
>>629
実行なんかしなくていいからよく読め
あれくらい読めないと(コーダーとして使い捨ての駒として働くのに)困るぞ
634デフォルトの名無しさん:2007/06/30(土) 00:04:47
>>607
fgets(c, 2, stdin); を scanf("%s", c); に変えてみると、
ENTERを押しても処理は進まない。

これはfgetsが、scanfなら食べ残す改行コード'\n'(コマンドプロンプトでENTERを押すと発生)
も食べてしまう卑しい輩であるから。
635デフォルトの名無しさん:2007/06/30(土) 00:06:52
>>633
うるせーよ偉そうに、実行してみりゃ分かるだろ。入力の合間に出力だろ?
それで良いならそれでやってるわボケが うぜぇよ tmpfile()野郎w
636デフォルトの名無しさん:2007/06/30(土) 00:07:34
>>607
fgets(c, 2, stdin); 以降に次の処理が書かれているから。
637デフォルトの名無しさん:2007/06/30(土) 00:07:55
633 名前:デフォルトの名無しさん 投稿日:2007/06/30(土) 00:04:20
>>629
実行なんかしなくていいからよく読め
あれくらい読めないと(コーダーとして使い捨ての駒として働くのに)困るぞ
あれくらい読めないと(コーダーとして使い捨ての駒として働くのに)困るぞ
あれくらい読めないと(コーダーとして使い捨ての駒として働くのに)困るぞ
↑三流プログラマーでも下を見て偉そうな態度がとれるという典型的な例w
638デフォルトの名無しさん:2007/06/30(土) 00:12:04
tmpfile()野郎は>>592じゃなかったのか
639デフォルトの名無しさん:2007/06/30(土) 00:12:12
↓だからうるせーつってんだろ?必死だなw
640デフォルトの名無しさん:2007/06/30(土) 00:26:49
[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] その他の制限: とくになし
お願いします。
641デフォルトの名無しさん:2007/06/30(土) 00:44:48
607です
ありがとうございます。
fgets(c, 2, stdin); 以外にもありませんか?
6429356: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などの初歩的に簡単な方法、ランダム形式の必要無し。
以上で願いします。
643デフォルトの名無しさん:2007/06/30(土) 00:51:33
>>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;
}
644デフォルトの名無しさん:2007/06/30(土) 00:54:17
>>643
丁寧にありがとうございます