Цикл n-1 раз вместо n раз.ЗАЧЕМ? - PullRequest
0 голосов
/ 28 мая 2018
#include <stdio.h>
#include <string.h>
int main()
{
int n,m,i,k;
scanf("%d",&n);
char sr[101][101];
for(i=0;i<n;i++)
{
    gets(sr[i]);
}
for(k=0;k<n;k++)
{
    m = strlen(sr[k]);
    if(m>10)
    {
        printf("%c%d%c\n",sr[k][0],(m-2),sr[k][m-1]);
    }
    else
    {
        puts(sr[k]);
    }
}

return 0;
}

если я использую i , здесь используется n-1 вход.но почему?начиная с 0,1,2,3 ... (n-1), разве это не займет n раз ввода?например, если дать 4, он принимает 3 входа, а не 4.

1 Ответ

0 голосов
/ 29 мая 2018

Когда scanf("%d",&n); выполняется, он использует цифру из ввода, но оставляет следующий символ.Этот персонаж, скорее всего, символ новой строки.Затем, когда gets выполняется, он читает этот символ новой строки.Таким образом, он помещает это в sr[0] как завершенную строку - просто новую строку и никаких других символов.Ваш цикл не выполняется n-1 раза;он выполняется n раз, но первая строка пуста.

Самый простой способ исправить это - изменить scanf("%d",&n) на scanf("%d ",&n);.Пробел после %d указывает scanf использовать символы пробела, что приведет к удалению символа новой строки из ввода.

Однако это также удалит пробелы в начале следующей строки.Если вы не хотите этого, оставьте scanf как есть, но вставьте код для чтения (и игнорирования) символов, пока он не прочитает символ новой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...