我有一个函数int getLine(char s[],int lim)
,它读取下一行的输入,如某人可能认为的那样,并将其长度作为整数返回。具体在C语言中读取并在达到限制时停止
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;
}
当一个运行该代码,并给出了输入N个类似的东西(N = 0.0000000000000000000001)甚至更多的零,该程序读取前20个说,好吧,我们达到了极限,返回19,并与其余的一样,直到它没有更多的阅读。我的问题是: 如何阻止它读取超过此限制的输入?
(try_Parse是我创建了一个功能,不介意吧)
使用['fgets'(http://www.cplusplus.com/reference/cstdio/fgets/),而不是你自制''函数getline?功能。或者'getline'用'fgets'(〜5行代码)通过包装器替换getline函数的主体。 –
为一我不知道如何使用它(当然,我会学习),但我想解决我的问题,它已经建成的方式。不过谢谢! –
如果达到'getLine()'中缓冲区的限制并且还没有看到换行符,则添加代码以读取到下一个换行符,丢弃字符:'int ch; while((ch = getchar())!= EOF && ch!='\ n');'(空循环体)。 –