Я должен считать входной файл как:
1
19 20 41 23
2
41 52 43
3
90 91 941
4
512
5
6
51 61
Каждая нечетная строка является целым числом. Каждая ровная строка является неизвестным количеством целых чисел.
Это очень легко в C++
while( cin >> k ){
............
}
Я не так привык к C, таким образом, я не мог сделать его в C. Какие-либо способы сделать это?
Способ Я бы сделал это, чтобы разбить его на две операции: прочитать строку, затем прочитать целые числа в этой строке. Вот ленивая реализация с использованием стандартной библиотеки C:
char line[1024], *p, *e;
long v;
while (fgets(line, sizeof(line), stdin)) {
p = line;
for (p = line; ; p = e) {
v = strtol(p, &e, 10);
if (p == e)
break;
// process v here
}
}
Прогон входного файла через:
#include <stdio.h>
int main() {
int k;
while (scanf("%d", &k) == 1) {
printf("read number: %d\n", k);
}
return 0;
}
Результат:
read number: 1 read number: 19 read number: 20 read number: 41 read number: 23 read number: 2 read number: 41 read number: 52 read number: 43 read number: 3 read number: 90 read number: 91 read number: 941 read number: 4 read number: 512 read number: 5 read number: 6 read number: 51 read number: 61
Это С-аналог кода, на который вы ссылаетесь в исходном вопросе.
Я бы сделал одну из:
fgetc(), чтобы прочитать отдельные символы и разобрать их самостоятельно (накапливать цифры до тех пор, пока вы не нажмете на пробел и не получите целое число для преобразования с помощью atoi(); если пробел - это новая строка, то она завершает список целых чисел)
fgets(), чтобы прочитать строку за раз, а затем разобрать строку (опять же, ищите пробелы, разделяющие значения), которую она возвращает.
Удаление и добавление с историей является ожидаемым событием при переименовании файла в Subversion. История не потеряна.
StartSvn и AnkhSvn фиксируют события из Visual Studio о переименовании файла и делают правильные действия.
-121--2758783-Вы можете использовать пакет setspace , который предоставляет среды интервалов, например:
\documentclass{article}
\usepackage{setspace}
\begin{document}
\doublespace
my line of text blah blah blah
new line of text with blank line between
\end{document}
или использовать среду verbatim
для точного управления макетом кода.
посмотрите на getc (3) или scanf (3)
Как указано на gitignore
man page :
Файл
gitignore
указывает на преднамеренно не отслеживаемые файлы, которые git должен игнорировать
Если glucosia.xcodeproj/project.pbxproj
(как предлагает Алан в комментариях)
git rm --cached glucosia.xcodeproj/project.pbxproj
Если файл уже зафиксирован, см. этот ответ SO ( git commit --amend
, чтобы удалить его из последней фиксации)
Установите для dataType значение «JSONP» при вызове $ .ajax () . Вы должны убедиться, что ответ правильно отформатирован, чтобы он работал. Википедия имеет хороший раздел на JSONP .
-121--4244654-Я бы разбил программу в разных задачах.
Первый шаг состоит в том, чтобы иметь возможность считывать пару строк, первую строку, которая сообщает вам количество считываемых чисел, а затем вторую строку, чтобы считывать фактические числа. Для этого может быть полезна функция, называемая чем-то вроде read _ set
. Он должен иметь возможность возвращать считанные числа и сигнальный конец файла, а также ошибки. Для этого мы можем определить структуру данных, такую как:
struct numbers {
long *data; /* or choose a type depending upon your needs */
size_t len;
};
, а затем мы можем объявить нашу функцию с прототипом:
int read_set(FILE *fp, struct numbers *num);
Функция выделит память для num- > data
, и установить num- > len
в правильное значение. Он возвращает 0 за успех и набор условий ошибки в противном случае. Мы можем получить фантазии и использовать enum
для возврата статусов позже. Пока допустим, что 0 = успех, 1 = конец файла, а все остальное - ошибка.
Затем вызывающий абонент вызывает read _ набор ()
в цикле:
struct numbers numbers;
int status;
while ((status = read_set(fp, &numbers)) == 0) {
/* process numbers->data, and then free it */
}
if (status == 1) {
/* hit end of file, everything is OK */
} else {
/* handle error */
}
Для реализации read _ набор ()
он должен считывать две строки. Существует множество реализаций чтения полной строки в C , поэтому можно использовать любую из них, и сначала прочитать строку, затем sscanf ()
/ strtoul ()
для одного числа (проверьте его возвращаемое значение!). После получения номера n
можно прочитать следующую строку в памяти и сделать следующее:
num->data = malloc(n * sizeof *num->data);
num->len = n;
Затем можно повторно вызвать sscanf ()
или strtol ()
для сохранения номеров в num- > data
. Необходимо поставить чеки, чтобы убедиться, что в этой строке точно n
чисел.
Обратите внимание, что можно записать read _ набор ()
другими способами: считывать строки по символам и анализировать числа по мере их чтения. Это имеет преимущество, заключающееся в том, что данные переходят только один раз и не нуждаются в большом буфере для хранения всей входной линии в памяти, но недостаток состоит в том, что они сами выполняют низкоуровневые операции, и чтение данных по символам может быть медленным.