Я не запускал ваш код, но я предполагаю, что проблема в том, что switchNavigator показывает заголовок. Если это так, то вы хотите изменить цвет навигатора на экране, на котором вы находитесь.
Так в вашем классе загрузки:
export default class Loading extends React.Component {
// Add this:
static navigationOptions = {
headerStyle: {
backgroundColor: '#2C3E50',
},
};
componentDidMount() {}
render() {
return (
Loading
)
}
};
Ссылка: https://reactnavigation.org/docs/en/headers.html#adjusting-header-styles
Когда Вы входите"c P101
"программа на самом деле получает"c P101\n
". Большая часть пропуска спецификаторов преобразования ведущий пробел включая новые строки, но %c
не делает. В первый раз вокруг всего сезам"\n
"читается, второй раз вокруг "\n" читается в command
, "c
"читается в prefix
, и"P
"оставлен, который не является числом так сбои преобразования и"P101\n
"оставлен на потоке. В следующий раз"P
"хранится в команду,"1
"хранится в префикс, и 1
(от остающегося"01
"), хранится во вход с"\n
"все еще на потоке в следующий раз. Можно устранить эту проблему путем помещения пространства в начале строки формата, которая пропустит любой ведущий пробел включая новые строки.
Подобная вещь происходит для второго случая, когда Вы входите"q
", "q\n
"вводится в поток, в первый раз вокруг"q
"читается, во второй раз"\n
"читается, только на третьем вызове является вторым"q
"читайте, можно избежать проблемы снова путем добавления пробела в начале строки формата.
Лучший способ сделать это должно было бы использовать что-то как fgets (), чтобы обработать строку за один раз и затем использовать sscanf (), чтобы сделать парсинг.
После того как у Вас есть строка, которая содержит строку. т.е. "C P101", можно использовать способности к парсингу sscanf.
См.: http://www.cplusplus.com/reference/clibrary/cstdio/sscanf.html
Для вопроса 1, я подозреваю, что у Вас есть проблема с Вашим printf()
, с тех пор нет никакого завершения "\n".
Поведение по умолчанию printf
должен буферизовать вывод, пока он не имеет полную строку. Это - то, если Вы явно не изменяете буферизацию на stdout
.
Для вопроса 2, Вы только что поразили одну из самых больших проблем с scanf()
. Если Ваш вход точно не соответствует строке сканирования, которую Вы указали, Ваши результаты не будут ничем как то, что Вы ожидаете.
Если у Вас будет опция, то у Вас будут лучшие результаты (и меньше проблем безопасности) путем игнорирования scanf()
и делая Ваш собственный парсинг. Например, использовать fgets()
считать всю строку в строку и затем обработать отдельные поля строки — возможно, даже использование sscanf()
.
Это действительно повреждается! Я не знал это
#include <stdio.h>
int main(void)
{
int counter = 1;
char command, prefix;
int input;
do
{
printf("counter: %d: ", counter);
scanf("%c %c%d", &command, &prefix, &input);
printf("---%c %c%d---\n", command, prefix, input);
counter++;
} while (command != 'q');
}
counter: 1: a b1
---a b1---
counter: 2: c d2
---
c1---
counter: 3: e f3
---d 21---
counter: 4: ---e f3---
counter: 5: g h4
---
g3---
Вывод, кажется, соответствует ответу Robert.