2015-01-10 6 views
0

Я данная матрица в данном входном формате:как хранить матрицу от входа

-1 2 3\n 
5 9 11\n 
3 4 5\n 

Таким образом, в словах оно: N целых чисел, где строка оканчивается нажатием пользователем ввести (\ п в примере) после каждого ряд.

Я должен проверить правильный ввод поэтому, если пользователь вводит что-либо, кроме цифр и пробелов, (пробел, новая линия, вкладка '\t' и характер - для отрицательных чисел), он является недействительным (в том числе + знака), выход из программа должна определить, является ли она матрицей NxN.

Способ, которым я собираюсь прочитать его символами, пока последний прочитанный символ не будет «\ n» и сохранит их в массиве с двумя размерами (для использования в будущем), сохраните количество сохраненных номеров, чтобы я мог проверить в будущем если это было NxN.

Это хороший подход или есть что-то умнее?

+0

Я думаю, что это просто приятно fgets & sscanf Если N задано заранее. – BLUEPIXY

+0

Знаете ли вы значение N заранее? –

+0

Нет его заранее не известно – lllook

ответ

0

Это похоже на достойный подход ... но вам не нужно их хранить - вам просто нужно проверить, не заканчивается ли он до N строк или после N строк.

  • Если количество записей в строке меняется, а затем возвращает false.
  • Если матрица заканчивается до числа строк == количество столбцов, верните false.
  • Если количество строк превышает количество столбцов, верните false.
  • Если он нарушает любые ваши правила символа, верните false.

EDIT: МОЙ плохо, просто потянул дум-дум и понял, что вы действительно хотели его сохранить, а не просто проверить. То же самое относится, но после прочтения первой строки в массиве, который вы сделали из некоторого максимального размера, вы можете выделить новый 2-мерный массив char с malloc, а затем просто сломаться, если по какой-то причине он не поместится.

+0

и мне нужно читать числа как символы, например, ввод первой строки - 1000 -2 3, он будет работать следующим образом: read c сохранить его в tmp, преобразованном в число, и сделать это (tmp * = tmp * 10 + c) и дождитесь «\ n» или «\ t» или «», тогда я знаю его конец номера и верну его, поэтому я могу его сохранить, но что произойдет, если пользователь вводит несколько цифр и возвращает eof (Ctrl-D в терминале), если он вводит только одно числовое значение, которое должно быть допустимым, поскольку оно является матрицей 1x1 и является квадратной матрицей – lllook

Смежные вопросы