Итак, я получил следующий код:
int q, x, y;
char l;
for (q = 0; q<10; q+=1) {
printf("%d\n", q);
if (3 == scanf("%c %d %d", &l, &x, &y)) {
printf("%d\n", q);
}
}
Я ожидал бы, что это запустит "scanf" 10 раз. Каждый раз он будет печатать «q», прежде чем я что-то введу, и еще раз после. Таким образом, ожидаемый результат должен быть таким (поправьте меня, если я ошибаюсь):
0
> a 1 1
0
1
> b 2 2
1
2
> c 3 3
2
...and so on.
Но я на самом деле понимаю.
0
> a 1 1
1
1
2
> a 2 2
3
3
4
> a 3 3
5
5
6
> a 4 4
7
7
8
> a 5 5
9
9
Если я отключу функцию scanf, она будет считаться от 0 до 9, как и ожидалось. Что происходит с функцией scanf, которая заставляет цикл for работать так странно? У меня есть некоторый опыт работы с Java / Python, но я совершенно новичок в C.
Редактирование кода на основе ваших комментариев к этому (извинения за странное форматирование):
for (q = 0; q<10; q+=1) {
printf("%d: ", q);
if (3 == scanf("%c %d %d ", &c, &x, &y)) printf("%d\n", q);
else { printf("WTF %d\n", q); }
}
половина решает проблему. Это работает для всех итераций, КРОМЕ первого. Как так:
0: a 0 0
WTF 0
1: b 1 1
1
2: c 2 2
2
Что там происходит? Над первой строкой есть другой выводимый код из другой части программы. Может ли это быть причиной?