2015-03-03 3 views
-4

Использование printf и без использования циклов или разветвлений?Как вы печатаете строку в символе C символом?

+2

что вы подразумеваете под символом? и как это отличается от использования 'printf ("% s ", var);'? – rcs

+0

Что значит персонаж по характеру? И почему вы не хотите использовать цикл? – philant

+1

'char * str =" bla "; printf ("% c% c% c \ n", str [0], str [1], str [2]); ' –

ответ

2

рекурсии является вашим другом:

int print_char_by_char(char * p) 
{ 
    *p && print_char_by_char(p+1); 
    printf("%c", *p); 
    return 1; 
} 

int main(void) 
{ 
    print_char_by_char("alk"); 
    return 0; 
} 
+0

Приятный, но логический' && 'считается ветвлением, не так ли? –

0

Ну, ваш вопрос

Как напечатать строку в C посимвольно?

Использование printf и без использования циклов или разветвлений?

Самый простой ответ на это

#include<stdio.h> 
int main() 
    { 
    char a[]="blablabla"; 
    printf("%s",a); 
    return 0; 
    } 

Это ответ на ваш вопрос. Если это не то, что вы хотели, то Укажите свой точный вопрос, указав более подробную информацию.

+0

Это не характер. Он печатает строку за один раз. –

+0

@PaulOgilvie, то что вы подразумеваете под символом «character by character» –

+0

@ arun-as, это означает, что программа pogrammer печатает один символ, затем, например, увеличивает указатель строки, затем программы печатают другой символ и т. Д. Например используя printf ("% c", * p); См. Другие примеры. –

1

Расширение ответ @alk, вы можете использовать рекурсию и указатели работать для того, чтобы избежать использования логических операторов:

#include <stdio.h> 

void dummy(char *p); 
void print(char *p); 

void (*fp[])(char *) = {dummy, print}; 

void dummy(char *p) 
{ 
    (void)p; 
} 

/** 
* Read *p as bool (0 or 1) using bitwise operators 
* Call print() recursively if 1 
* Call dummy() if 0 and exits from function 
*/ 
void print(char *p) 
{ 
    char i = *p; 

    i |= i >> 4; 
    i |= i >> 2; 
    i |= i >> 1; 
    printf("%c", *p); 
    fp[i & 1](p + 1); 
} 

int main(void) 
{ 
    print("Hello world\n"); 
    return 0; 
} 
+0

C не имеет нативного типа bool, который будет равен нулю или 1. Следовательно, i будет равным нулю или больше нуля и вызывать ошибку, если не 1 при выборе функции. Он будет работать с массивом из 255 записей: в ноте ввода есть манекен, у всех остальных - print_char_by_char. (Вы можете сделать этот массив глобальным.) –

+0

@PaulOgilvie, http://stackoverflow.com/a/1608350/1606345 –

+1

Это означает, что это работает только на C99, а не в старых версиях бензопилы C (где программист должен делать все сам) и в тех старых версиях с макросами макрос будет делать (x? 1: 0), который является ветвью и поэтому нарушает назначение (а встроенный тип B99 bool заставляет компилятор сгенерировать эту ветвь, следовательно, также нарушение назначение). –

0

@ qwe2004, скажите вашему профессору, что сообщество Stack Overflow соглашается, что не может быть сделано. Если он скажет, что это можно сделать, мы все заинтересованы в том, чтобы увидеть его умный и хитрый способ сделать это и учиться. (Скажите ему, что мы будем критиковать скрытые ветвящиеся и логические тесты.)

+0

Это можно сделать без логических операторов, взгляните на мой ответ. –

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