Ошибка ввода scanf - C (СИ)
Формулировка задачи:
не воспринимает целое в переменной n scanf("Число N = %d",n);
//ГЉГ*æäûå n ñèìâîëîâ ГўГ® ââåäåГ*Г*îì ГІГҐГЄГ±ГІГҐ îòäåëèòü Г§Г*Г*êîì "!".
#include <stdio.h>
#include <conio.h>
#include <string.h>
char buf[1]; // ГЎГіГґГҐГ°
int main(int argc, char *argv[])
{
char str[255], str1[255];
int i,j,len,n,k=1;
size_t sz;
buf[0] = '\0';
str1[0]= '\0';
// èçáûòî÷Г*Г*Гї ГЁГ*ГЁГ¶ГЁГ*ëèçГ*Г¶ГЁГї
printf("Stroka=");
gets(str);
scanf("×èñëî N = %d",n);
// n=7;
sz = strncpy(buf, str, 1);
// ïðèìåð îïðåäåëåГ*ГЁГї ГіГ±ГҐГ·ГҐГ*ГЁГї ñòðîêè
len=strlen(str);
for(i=0;i<len;i++)
{
sz = strncpy(buf, str+i, 1);
if (i==n*k)
{
strcat(str1, "!");
k++;
}
strcat(str1, buf);
}
printf("Stroka=");
len=strlen(str1);
for(i=0;i<len;i++)
{
//Âûâîä ñëîâГ*
printf("%c",str1[i]);
}
printf("\nStroka=%s",str1);
getch();
}Решение задачи: «Ошибка ввода scanf»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
size_t n, len, offset;
char buf[BUFSIZ];
printf("Please enter a sentence: ");
fflush(stdout);
fgets(buf, BUFSIZ, stdin);
printf("Enter group size: ");
fflush(stdout);
scanf("%zd", &n);
len = strlen(buf);
if(len != 0 && buf[len - 1] == '\n')
buf[len - 1] = '\0';
printf("Sentence with each %zd char(s) separated with `!':\n", n);
for(offset = 0; offset < len; offset += n)
{
printf("%.*s", n, buf + offset);
if(offset + n < len)
putchar('!');
}
putchar('\n');
exit(0);
}
Объяснение кода листинга программы
- В начале программы подключаются необходимые библиотеки.
- В функции main() объявляются переменные: — n - переменная для хранения количества символов, которые нужно вывести на экран; — len - переменная для хранения длины строки, введенной пользователем; — offset - переменная для хранения индекса, с которого в данный момент выводится строка; — buf - массив символов, в который считывается строка, введенная пользователем.
- Выводится предложение с просьбой ввести строку.
- С помощью fflush() очищается буфер вывода, чтобы введенное предложение не осталось в буфере и не было выведено на экран при следующем выводе.
- С помощью fgets() вводится строка.
- С помощью scanf() считывается количество символов, которые нужно вывести на экран.
- Проверяется длина введенной строки. Если она не равна нулю и последний символ строки — символ новой строки (\n), то он заменяется на символ конца строки (\0).
- Выводится предложение с указанием количества символов, которые будут выведены на экран.
- С помощью цикла for выводится введенная пользователем строка, разбитая на подстроки указанного размера.
- После каждой подстроки выводится символ новой строки ('!'), если следующая подстрока не является последней.
- После вывода всех подстрок выводится символ новой строки ('\n').
- Программа завершается с помощью функции exit().