2015-12-16 1 views
-1

Код приведен ниже:
Когда я запускаю программу с помощью строки printf(ch), она говорит, что проект не может быть выполнен. Однако, когда я использую заполнитель, проект работает отлично. Любая идея, почему это так?C Программирование: Codeblocks перестает работать с C до тех пор, пока я не сделаю небольшое изменение. Любая идея почему?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    char arr[10]; 
    printf("Enter a password. \n"); 
    scanf("%s",arr); 
    // printf(arr); 
    char ch; 
    int i; 
    for (i=0; i<10; i++) 
    { 
     ch=arr[i]; 

     printf(ch); 
     //printf("%c",ch);--> if i use this instead of printf(ch) it works fine. Can this please be explained 

    } 
} 
+2

Это потому, что вы приводите неверный аргумент 'printf'. Первый arg должен быть 'const char *', тогда как вы дали ему 'char'. Что вы ожидали или что вы пытаетесь доказать? Просто придерживайтесь второго (прокомментированного) вызова 'printf'. – kaylum

+1

Если ваш компилятор не сообщает об ошибке в строке 'printf (ch);', сразу отбросьте его и найдите компетентный компилятор. –

+1

Вы прочитали документацию по [printf (3)] (http://man7.org/linux/man-pages/man3/printf.3.html)? Чтение было бы быстрее, чем просить здесь. И скомпилируйте все предупреждения и информацию об отладке: 'gcc -Wall -Wextra -g'; см. также [putchar (3)] (http://man7.org/linux/man-pages/man3/putchar.3.html) –

ответ

1

Это потому, что printf ожидает, что аргумент должен быть в const char*, ... в качестве входного аргумента в то время как

char ch; 

не типа указателя

Таким образом, вы «можете» сделать:

char ch = 'A'; 
printf(&ch); //this is bad because not only it is not well-formatted but also, though compiled, may cause undefined behavior. This is to only show you the idea 

но не можем:

char ch = 'A'; 
printf(ch); 

Edited (после коррекции paddy «s):

Правильного способ печати его с помощью printf является использованием формата печати, предусмотренный характера,

char ch = 'A'; 
printf("%c", ch); 

Надеется, что это может помочь.

+0

Спасибо большое! Понял это –

+0

@ShravanNiranjan Отлично! =) – Ian

+1

Не только 'printf (&ch);' 'не очень хорошо", это _undefined behaviour_. ** Не ** делать это !! Использовать 'printf ("% c ", ch);'. – paddy

0

Что вы ожидаете, когда лжете компилятору? :-) Прототип

В printf функционального режима, а объявленный в <stdio.h> является

int printf(const char *format, ...); 

что означает, что первый аргумент должен быть дан, и оно должно быть типа указатель на голец. Если вместо этого вы передаете printf a char, то это неверно интерпретируется как указатель на символ, вызывая неопределенное поведение в C lingo.

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

PS: использование надлежащей терминологии также помогает в решении проблем. То, что вы называете , заполнителем называется аргумент или, более конкретно, формат.

Смежные вопросы