私は誰かが思いついているように、次の入力行を読み込んで長さを整数として返す関数int getLine(char s[],int lim)
を持っています。具体的にC言語のreadlineと限界に達したときに終了する
int getLine(char s[],int lim)
{
int i;
char c;
for(i=0; i<lim-1&&(c=getchar())!='\n'; ++i)
{
s[i]=c;
}
s[i]='\0';
return i;
}
これまでのところは良い、問題は、私は、ユーザーが彼が望んでいるほど多くの文字を追加することができるようにしたくないということですが、私は彼が制限されることにしたい、と私はこれを追加しましたint lim
しかし、私はすぐに実現するように、これはしない他のループとの良好な協働、例えば
int main()
{
double len;
int currentLength=0;
char s[20];
printf("Give an integer N with 1%cN%c30 to make a NxN array\n",242,242);
do
{
printf("N=");
}
while(!((currentLength=getLine(s,20))>0&&try_Parse(s,&len)&&(len - (int)len)==0&&len>=1&&len<=30));
int real_len = (int) len;
double A[real_len*real_len];
for(int i=0; i<real_len; ++i)
{
for(int j=0; j<real_len; ++j)
{
do
{
printf("Give A[%d][%d]=",i+1,j+1);
}
while(!((currentLength=getLine(s,20))>0&&try_Parse(s,&A[i*real_len+j])));
return 0;
}
1は、このコードを実行し、その(N = 0.0000000000000000000001)のようなNの何かのために入力を与えるか、それ以上のゼロ、プログラムは最初の20を読んで、私たちが限界に達したと言って、19を返し、それ以上読むことができなくなるまで残りを同じことをします。
私の質問は: この制限を超える入力を読み取れないようにするにはどうすればよいですか?
(try_Parseは、私が作成した関数であり、それを気にしない)
使用[ 'fgets'](http://www.cplusplus.com/reference/cstdio/fgets/)の代わりに、あなたの自家製'のgetline '?関数。あるいは 'getline'は' getlines'関数の本体を 'fgets'(〜5行のコード)を使ってラッパーで置き換えます。 –
私はそれを使用する方法を知っていません(もちろん私は学ぶでしょう)が、私はすでにそれが構築されている方法で私の問題を解決したいと思います。とにかくありがとう ! –
'getLine()'のバッファーの上限に達し、まだ改行が見付からない場合は、文字を破棄して次の改行に読み込むコードを追加してください: 'int ch; while((ch = getchar())!= EOF && ch!= '\ n'); '(空のループ本体)。 –