2013-08-31 3 views
-3

Мой код:Почему этот код возвращает значение Garbage?

void main() 
{ 
    while(1){ 
     if(printf("%d",printf("%d"))) 
      break; 
     else 
      continue; 
    } 
} 

Я знаю, что printf() возвращает количество символов printed.So, почему выше код выхода Garbage values, когда он должен вывести 1. Пожалуйста, объясните.

Спасибо.

+1

Второй параметр вашего левого printf должен быть числом. Вместо этого вы передали ему функцию printf. Это похоже на попытку положить гумми медведей в ваш бензобак, чтобы он бежал. Пожалуйста, прочитайте, что такое printf: http://www.cplusplus.com/reference/cstdio/printf/ –

+0

Вы знакомы с условными обозначениями параметров 'printf'? Если это так, небольшая проверка кода решит вашу проблему. И какова цель его использования в цикле 'while'? – lurker

ответ

4

Поскольку второй printf отсутствует номер, который он, как предполагается печатать ...

Кстати, не следует ожидать, чтобы увидеть только один, вы увидите номер, напечатанный на второй printf до этого. Например. если ваш код:

printf("%d",printf("%d", 7)); 

вы увидите 71; первые 7 будут напечатаны, а затем 1.

+0

"вы увидите номер, напечатанный вторым printf до этого". Что это за ценность? – user2708039

+1

Не было бы 422? printf возвращает количество символов, написанных так, что printf («% d», 42) должен вернуться 2. –

+0

@NigelHarper, верно, это было 1 в вопросе, но я хотел напечатать 42 и не переставал думать. Исправлен ответ. – nickie

2

Поскольку вы не предоставили аргументы в пользу внутренней printf «s %d

Проверить с:

if(printf("%d",printf("%d ",3))), заметьте, что я использовал пробел после %d

Теперь вы увидите

3 2

последний 2 из-за дополнительного пространства

+0

Спасибо. Но я все еще не понимаю, почему мой код дал значения для мусора? – user2708039

+0

@ user2708039 прочитал первую строку моего сообщения '% d' - спецификатор формата для' printf', который требует целого числа, так как вы его не указали, вы получите неопределенное поведение – P0W

0
printf("%d",printf("%d")) 

равным

int i = printf("%d"); 
printf("%d",i); 

Однако, то int i =printf("%d"); линия PRINTF значение мусора, потому что вы не даете ему значение это нужно.

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