У меня есть функция 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' заменяет тело вашей функции' getline' оболочкой, использующей 'fgets', (~ 5 строк кода). –
для одного я не знаю, как его использовать (конечно, я буду учиться), но я бы хотел решить мою проблему так, как она уже построена. Но все равно спасибо ! –
Если вы достигли предела буфера в 'getLine()' и еще не видели новую строку, добавьте код для чтения следующей новой строки, отбросив символы: 'int ch; while ((ch = getchar())! = EOF && ch! = '\ n'); '(пустое тело цикла). –