Пропускает ввод параметра
Ввести строку, распечатать строку и ее длину. Обработать в соответствии с алгоритмом, удалив ведущие пробелы, а последовательность пробелов заменить одним пробелом. Обработку строки оформить функциями. Распечатать результирующую строку. Обработать строку в соответствии с заданием: ограничить каждое слово максимально k – символами (<=k), лишние символы удалить, результат распечатать.
Я написала прогу, только у меня когда надо К вводить , он странно через сканф проходит, не то что бы мимо, просто идет не требуя вводить число. Может кто подсказать чего не правильно?
Вот прога
#include <conio.h>
char st1[100],st2[100],st3[100];
int lim=0,i=0,k;
void vvod(char str[100])
{
printf("\n");
while((str[lim]=getchar())!=EOF) lim++;
str[lim]='\0';
}
void delspace(char str[100], char str1[100])
{
lim=0;
while(str[lim]!='\0')
if (str[lim]==' ') lim++;
else {
while ((str[lim]!=' ')&&(str[lim]!='\0'))
{
str1[i]=str[lim];
lim++;
i++;
}
if (str[lim]=='\0') str1[i]='\0';
else {str1[i]=' '; i++;}
}
str1[i]='\0';
}
void obr( char str[100],char str1[100],int k)
{
int n=1;
lim=0;i=0;
while (str[lim]!='\0')
{
if (str[lim]!=' ') {if(n<=k) { str1[i]=str[lim];
n++;
i++;
}}
else { n=1;
str1[i]=' ';
i++;
}
lim++;
}
}
void main()
{
printf("\nВведите строку: \n");vvod(st1);
lim=0;
while(st1[lim]!='\0') lim++;
printf("\Длина строки - %d \n", lim);
delspace(st1,st2);
printf("\nСтрока без лишних пробелов %s", st2);
printf("\nВведите число букв которым нужно ограничить слово - ");
scanf("%d",&k);
obr(st2,st3,k);
printf("\nСтрока после обработки \n\n%s", st3);
getch();
}
- код оформи кнопочкой {...} в меню от arrjj, 01 июля 2012 года
{
printf("\n");
while((str[lim]=getchar())!=EOF) lim++;
str[lim]='\0';
}
{
printf("\n");
int input;
while((input = getchar())!=EOF) str[lim++] = input;
str[lim]='\0';
}
Считывайте строку до символа новой строки (\n). Если строка может быть многострочная - то надо придумывать какой-то иной признак ее окончания: ведь вы затем хотите считывать из потока еще и другие данные...
Не проще ли fgets(str,n,stdin)?
не лишний ноль а перенос строки (\n) - прочитай описание функции.
не лишний ноль а перенос строки (\n) - прочитай описание функции.
Ну, я же не прошу почитать описание scanf, которая в вашем варианте похерит строку и считает только слово... :)
Кстати, fgets символ \n не добавляет, а не удаляет - а это тоже две большие разницы...
а кстати да :) тем не менее
Кстати, fgets символ \n не добавляет, а не удаляет - а это тоже две большие разницы...
при вводе из stdin он Enter как \n добавит в конец строки. Добавит потому что в контексте ввода в консоль Enter есть подтверждение а не символ. gets такого не сделает, но в нем нет ограничения на длину.... Остается только cin.getline(char*,int)
Вместо ввода gets(str), k читает, спасибо )
Да не просто getchar EOF вернет только если ошибка чтения стандартного ввода будет или ввод из файла идет (запуск program.exe < 123.txt ), надо проверять на перенос строки.