2015-05-01 2 views
-4
#include <iostream> 
using std::cout; 
using std::cin; 
using std::endl; 

int main(){ 
    char zahl[255]; 
    cin>>zahl; 
    for(int i=255; i>=0; i--) 
    if(zahl[i] != 0) 
     cout<<zahl[i]; 

    cout<<endl; 
    return 0; 
} 

Когда я ввожу несколько слов, вход меняется, но до и после этого есть неопределенные выражения. Может ли кто-нибудь объяснить причину этого? Насколько я понял, массив символов заполняется вставленным выражением (из [0] on), остальное заполняется '\ 0. По условию if я пропускаю '\ 0. Откуда берутся неопределенные выражения?реверсивный вход - неопределенный вывод

ти встречает CS

+0

Попробуйте использовать [ 'станд :: reverse'] (http://www.cplusplus.com/reference/algorithm/reverse/?kw = reverse) вместо того, чтобы сворачивать свои собственные. – AndyG

+1

Ваша проблема, как правило, в том, что 'zahl' будет иметь дозорный символ' '\ 0'' где-то в индексе до 254. Оставьте это в покое и только обратные символы перед ним. – AndyG

+0

Пример использования 'std :: string' и' std :: reverse': http://ideone.com/HL1znW – AndyG

ответ

4

Первоначально массив неинициализированный и содержит мусор. cin записывает ввод, за которым следует одиночный нуль для завершения; остальная часть массива по-прежнему содержит мусор, который ваш контур выдает перед входом.

Можно указать, что массив будет нулевой инициализируется:

char zahl[255] = {}; 

Или вы можете измерить длину строки, и начать оттуда:

for (int i=std::strlen(zahl)-1; i >= 0; i--) 

Или, еще лучше, использовать стандарт библиотека исправить потенциальное переполнение буфера:

std::string zahl; 
std::cin >> zahl; 
std::copy(zahl.rbegin(), zahl.rend(), std::ostream_iterator<char>(std::cout)); 
+0

Вы также должны использовать 'char zahl [255] {0};' для нулевого инициализации массива , – NathanOliver

+0

@NathanOliver: Да, существует множество способов инициализации нуля. –

2

Ваш for loop будет работать 256 Ti mes, считая, что введенное слово имеет длину 255 символов. Тем не менее, пользовательский ввод будет отличаться по длине, поэтому вместо этого вычислите длину и используйте ее в for loop.

int len = strlen(zahl);

Код теперь будет:

#include <iostream> 
#include<string.h> 
using std::cout; 
using std::cin; 
using std::endl; 

int main(){ 
char zahl[255]; 
cin>>zahl; 
int len = strlen(zahl); 
for(int i=len-1; i>=0; i--) 
    if(zahl[i] != 0) 
    cout<<zahl[i]; 

cout<<endl; 
return 0; 
} 
Смежные вопросы