dポイントプレゼントキャンペーン実施中!

#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");
}
}

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

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

アドバイスお待ちしております。

A 回答 (6件)

edomin2004さんへ


質問文の解釈の仕方が違うようです^^;

breakするということは少なくともループを1回回りきるので、「ループがぜんぜん回らない」という表現と不一致するということでANo.4の回答になりました。
質問者さんが、どんな文字を入力してもhash_funcがコールされずにルーチンが終了するという現象を「ループがぜんぜん回らない」と表現しているのなら、まさしくあなたの回答がパーフェクトだと思います。
    • good
    • 0

「if( s[0]='.') break;


が意図した動作かどうかにかかわらず、ループは回るでしょう。」
とありますが、代入の結果返される値は'.'です。
'.'ならfalseじゃないからtrueでbreak;
    • good
    • 1

いや、


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

単純にscanfでブロックしているだけでは?
    • good
    • 0

とりあえず、


if( s[0]='.') break;

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

s[0]='.'は代入。なので、必ずbreak。
s[0]=='.'は比較。なので、'.'ならbreak。
    • good
    • 0

最近のコンパイラは、ちゃんとこの手のボケにツッコミを入れる能力を獲得しているはずですが?

    • good
    • 0

こんばんは。



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

if( s[0]='.')

コレは何をしているのか、考えてみてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!