Функции и массивы - PullRequest
       2

Функции и массивы

4 голосов
/ 17 января 2011

Моя маленькая программа ниже должна взять 5 чисел от пользователя, сохранить их в массив целых чисел и использовать функцию для их распечатки. С уважением, это не работает, и ничего не распечатывается. Я не могу найти ошибку, поэтому буду рад любому совету. Спасибо.

#include <stdio.h>


void printarray(int intarray[], int n)

{
    int i;

    for(i = 0; i < n; i ++)
    {
        printf("%d", intarray[i]);
    }
}

int main ()

{
    const int n = 5;
    int temp = 0;
    int i;
    int intarray [n];
    char check;

    printf("Please type in your numbers!\n");

    for(i = 0; i < n; i ++)
    {
        printf("");
            scanf("%d", &temp);         
        intarray[i] = temp;

    }

    printf("Do you want to print them out? (yes/no): ");
        scanf("%c", &check);

        if (check == 'y')
            printarray(intarray, n);

    getchar();
    getchar();
    getchar();
    getchar();
    return 0;
}

Ответы [ 4 ]

6 голосов
/ 17 января 2011

Измените ваш вывод в printarray() на следующее:

    printf("%d\n", intarray[i]);

              ^^

Это добавит новую строку после каждого номера.

Обычно вывод, записываемый на консоль в C, равен буферизован , пока не будет выведена полная строка. Ваша функция printarray() не записывает никаких новых строк, поэтому вывод буферизуется до тех пор, пока вы его не напечатаете. Однако вы ожидаете ввода от пользователя, прежде чем печатать новую строку.

5 голосов
/ 17 января 2011

Измените на это:

char check[2];

А также на то:

scanf("%s", check);
if (!strcmp(check,"y"))
    printarray(intarray, n);

Надеюсь, что помогло.Ваш scanf("%c", &check); не удалось.Вместо y в итоге вы получите NL (код ASCII 10), что означает, что часть if не работает.Может быть, кто-то мог бы дать лучше.Имейте в виду, что если вы введете что-то большее (например, yess), вам немного не повезет ;)

2 голосов
/ 17 января 2011

Помимо предложений о печати символа \n после массива (которые верны), вы также должны быть осторожны с вашим scanf, который ожидает ответа "да / нет". Магген был первым, кто это заметил (см. Его ответ).

Вы использовали %c, указанное в вашем scanf. Спецификатор %c в scanf не пропускает пробелы, что означает, что этот scanf будет читать все пробелы, оставшиеся во входном буфере после ввода массива. Вы нажимаете клавишу «Ввод» после ввода массива, который помещает символ новой строки в буфер ввода. После этого scanf("%c", &check) немедленно прочитает этот ожидающий символ новой строки вместо того, чтобы ждать, пока вы введете «да» или «нет». Это еще одна причина, по которой ваш код ничего не печатает.

Чтобы исправить ваш scanf, вы должны заставить его пропустить все пробельные символы перед прочтением фактического ответа. Вы можете сделать это scanf(" %c", &check). Обратите внимание на дополнительный пробел перед %c. Пробел в строке формата scanf заставляет пропустить все непрерывные пробелы, начиная с текущей позиции чтения. Символ новой строки оказывается пробелом, поэтому он будет игнорироваться этим scanf.

0 голосов
/ 17 января 2011
printf("%d", intarray[i]); 

добавить новую строку после этого

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