2016-12-24 4 views
-5

По какой-то причине я не могу написать ch char type из scanf_s, который я использую в visual studio 2013. Я попытался установить «% c» в обоих направлениях «% c» и попытался scanf и scanf_s. Я потерян.Тип Char не принимает вход

// Alphabetic Pyramid Program - The Egyptians must have used C! 
#include <stdio.h> 

int main(void) 
{ 
    char ch; 

    printf("Enter the letter that will be the foundations of your Aphabetic Pyramid:\n"); // User is promted to enter a letter 
    scanf_s(" %c", &ch); // User inputs Foundational_letter 
    printf("The code for %c is %d!\n", ch, ch); 

    getchar(); 
    getchar(); 

    return 0; 
} 
+1

Добро пожаловать в переполнение стека. Пожалуйста, найдите время, чтобы прочитать [The Tour] (http://stackoverflow.com/tour) и обратитесь к материалу из [Справочного центра] (http://stackoverflow.com/help/asking) о том, что и как вы можете спросите здесь. –

+2

Помните: C и C++ - это не тот же язык. Только отметьте один. Кроме того, с помощью 'scanf_s', я считаю, что вам нужно предоставить размер буфера:' scanf_s («% c», & ch, 1); ' –

+0

« Я не могу записать ch ch-тип из scan_f ». Пожалуйста, будьте более конкретными. Есть ли ошибка? Если есть некорректное поведение, пожалуйста, укажите ввод, ожидаемый результат и фактический результат. – kaylum

ответ

4

scanf_s два аргумента для %c спецификатора: принимающий адрес и размера, что составляет 1:

scanf_s(" %c", &ch, 1); 

дизайна, все безопасные версии зсапа (те, заканчивая _s) нуждаются в некоторых параметр, определяющий объем зарезервированного пространства буфера для приема ввода, если он имеет тип string (% s) и char (% c). то есть для %s вы должны указать адрес буфера и его зарезервированный размер.

Если вы не применяете эти правила, ожидайте неопределенного поведения.

+0

["Когда считываются несколько символов для строк с нулевым завершающим символом, целые числа используются в качестве спецификации ширины и размера буфера."] (Https://msdn.microsoft.com/en-us/library/w40768et.aspx# Anchor_2) – Stargateur