Naveen_vemuri Ответов: 1

Как сканировать несколько строк слов с пробелами в C


я хочу отсканировать эти слова и распечатать их.
1)Мне очень нравится эта программа
2)мне это нравится
как это сделать в C?
то есть я хочу отсканировать n строк с пробелами и распечатать их.
когда я использую "%[^\n]s " вместо %s в scanf, я не получаю вывода.

Что я уже пробовал:

#include < stdio.h>
#include & lt;string.h>
#define MAX_STRING_SIZE 100
тап_п()
{

int n, i;
ул. гольца ** ;

scanf ("%d",&n); / / сколько строк

// Выделите достаточно памяти для хранения количества запрошенных строк
str = malloc(n * sizeof(char*));
для (i = 0; i < n; i++) {
str[i] = malloc ((MAX_STRING_SIZE + 1) * sizeof(char));
memset(str[i], 0, MAX_STRING_SIZE + 1);
}

// введите каждую строку
для (i=0;i< n; i++)
{
scanf ("%s", str[i]);
}

// отображение каждой строки
для (i=0;i< n; i++)
{
printf ("%s\n", str[i]);
}

// Освободите выделенную нами память
для (i = 0; i < n; i++)
бесплатно(str[i]);
ул. Свободная();
}

1 Ответов

Рейтинг:
2

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании письма: успешная компиляция означает, что вы написали письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но к более ранним стадиям вы придете позже): тестирование и отладка.

Начните с рассмотрения того, что он делает и чем это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его-он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить почему. Поставить точку останова на строке:
scanf("%s", str[i]);

и запустите свое приложение. Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она на самом деле делала, когда вы использовали кнопку "шаг вперед" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?

Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он совершенствуется только при использовании!

Да, я, наверное, мог бы сказать вам, в чем "проблема" - но сделать это самому несложно, и при этом вы узнаете что-то действительно стоящее!