#c
#c
Вопрос:
Итак, это вопрос, основанный на выводе:
Код является:
#include <stdio.h>
int main()
{
char ch;
if ((ch=printf( "")))
printf("It mattersn");
else
printf("It doesnt mattern");
return 0;
}
Почему вывод — Это не имеет значения? Что именно тестируется в операторе if?
Во-вторых, в операторах switch case, если я это сделаю, что-то вроде,
char a[] = "abc";
и тогда я делаю,
switch(i)
{
case abc:
........
}
Почему это неправильно? Не можем ли мы использовать строковые константы в операторах case?
Комментарии:
1. недостаточно ясно: что такое i? Кстати, вы должны использовать «abc» вместо abc в инструкции case
2. @vivoconunxino: вы должны использовать «abc» вместо abc в инструкции case , чтобы решить, что именно?
3. Итак, у нас могут быть строковые константы в операторах case, верно?
4.
char a = "abc"
это 3 символа, а не 15. @Tim Castelijns:
"abc"
это строковый литерал, который «содержит» массив из четырех символов:'a'
,'b'
'c'
и нулевой символ .
Ответ №1:
printf()
возвращает количество записанных символов. При вызове с пустой строкой формата ( ""
), это значение, конечно, будет равно 0, что будет считаться «false» if
, и, таким образом, else
будет принята ветвь.
И нет, вы, конечно, не можете switch()
использовать строки в C.
Комментарии:
1. Итак, мы можем иметь только целочисленные константы в случае операторов switch case?
2. И в самом операторе switch, т. Е.
switch(i)
, Здесь, i может быть только целым числом или чем-то еще?3. Это должно быть целочисленное выражение.
4. @GrzegorzSzpetkowski Это не соответствует тому, что говорится в проекте C99, и я не думаю, что это так уж далеко от истины. Там просто написано «целочисленное выражение». Вы можете сделать, например,
switch (x 3)
дляint x
.
Ответ №2:
printf возвращает количество напечатанных символов, в вашем случае 0 символов.
Итак, вы устанавливаете ch в 0.
Присваивание принимает присвоенное значение, в данном случае 0.
0 равно false, следовательно, оператор if переходит в блок else.
Ответ №3:
printf
возвращает длину строки, которую он выводит на экран, поэтому printf( "")
ничего не выводит, так что length=0
так if(0)
не выполняется, поэтому переходит к else
части.
char a
является символом, а не строкой, поэтому char a[]="abc" OR char *a="abc"
допустимо и, наконец, только char
и int
разрешено в switch-cases
не strings
Ответ №4:
-
Посмотрите документацию по функции printf
int printf ( формат const char *, … );
… При успешном завершении возвращается общее количество записанных символов. Если возникает ошибка записи, устанавливается индикатор ошибки (ferror) и возвращается отрицательное число…