ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3978793 ループが回らない
質問者:mari_s2 #include<stdio.h>
#include<string.h>

#define HASH_SIZE 100
#define NAME_SIZE 20
char name[ HASH_SIZE ][ NAME_SIZE ];
i
int hash_func( char str[] )
{

}

void main()
{
char s[ NAME_SIZE ],i;
int index ;
while(1){
printf("文字を入力!");
scanf("%s",s);

if( s[0]='.') break;
index = hash_func(s);
strcpy( name[ index ],s) ;
printf("*\n");
}
}

このプログラムの
無限ループのところがぜんぜん回らないんです。
自分なりに試行錯誤してみたのですが
限界に達しましたので助言をいただきたいです。
上の関数は今はなにも書いてないですが、
書いてあっても動かないです。

月曜日提出の課題なので
なるべく早め回答いただけると幸いです。

アドバイスお待ちしております。
困り度:
  • すぐに回答を!
質問投稿日時:
08/04/27 00:50
最新から表示回答順に表示

回答

ANo.6 edomin2004さんへ
質問文の解釈の仕方が違うようです^^;

breakするということは少なくともループを1回回りきるので、「ループがぜんぜん回らない」という表現と不一致するということでANo.4の回答になりました。
質問者さんが、どんな文字を入力してもhash_funcがコールされずにルーチンが終了するという現象を「ループがぜんぜん回らない」と表現しているのなら、まさしくあなたの回答がパーフェクトだと思います。
回答者:kusa_cw
種類:補足要求
どんな人:経験者
自信:参考意見
回答日時:
08/04/28 13:10
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.5 「if( s[0]='.') break;
が意図した動作かどうかにかかわらず、ループは回るでしょう。」
とありますが、代入の結果返される値は'.'です。
'.'ならfalseじゃないからtrueでbreak;
回答者:edomin2004
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/04/27 22:02
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.4 いや、
if( s[0]='.') break;
が意図した動作かどうかにかかわらず、ループは回るでしょう。

単純にscanfでブロックしているだけでは?
回答者:kusa_cw
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:
08/04/27 14:04
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.3 とりあえず、
if( s[0]='.') break;

if( s[0]=='.') break;
に変更する。

s[0]='.'は代入。なので、必ずbreak。
s[0]=='.'は比較。なので、'.'ならbreak。
回答者:edomin2004
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/04/27 01:00
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.2 最近のコンパイラは、ちゃんとこの手のボケにツッコミを入れる能力を獲得しているはずですが?
回答者:koko_u_
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/04/27 00:59
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.1 こんばんは。

答えを教えてしまうと力にならないので、ヒントです。

if( s[0]='.')

コレは何をしているのか、考えてみてください。
回答者:manima2
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:
08/04/27 00:57
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)
最新から表示回答順に表示