проблема в получении ввода для типа символа в с - PullRequest
1 голос
/ 26 октября 2010

У меня проблемы с вводом типа символа в c. Поведение моего исходного кода необычно.

мой код :

int n,i;
char *ps;

printf("Total no:");

scanf("%d",&n);

ps=(char *)calloc(n,sizeof(char));

for(i=0;i<n;i++) {
    printf("Enter character %d:",i+1);
    scanf("%c",ps+i);
}

тогда согласно моему требованию он должен принимать данные для всех нет.из n, но он не работает нормально, он не будет принимать никаких входных данных, когда цикл запускается в первый раз, затем он принимает входные данные, когда цикл выполняется 2 раза, а затем через 4 раза и т. д.ошибка с моим кодом?

- заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 26 октября 2010

Каждый вызов scanf внутри цикла читает следующий символ. Если вы введете, например:

Total no: 4 Введите

Тогда первый scanf будет читать 4 как int, но Enter будет рассматриваться следующим scanf (внутри цикла) как новая строка, \n .

Измените первый вызов на scanf("%d\n", &n), а внутри цикла - scanf("%c\n",ps+i).

1 голос
/ 26 октября 2010

Ваши вызовы scanf не включают перевод строки, поэтому, когда вы вводите «5 [enter]» в качестве ввода, первый scanf читает «5», а второй - перевод новой строки.Попробуйте изменить вызовы scanf так, чтобы они выглядели как scanf("%d\n", &n) или scanf("%d%*c", &n), чтобы явно обрабатывать перевод строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...