возвращаться в цикл? - PullRequest
       8

возвращаться в цикл?

2 голосов
/ 21 марта 2010

В основном я получил это для цикла, и я хочу, чтобы введенное число (например, 123) было распечатано в обратном порядке, поэтому «321». пока он работает нормально и печатает правильный порядок, когда цикл for равен

for(i = 0; i<len ; i++)

но я получаю сообщение об ошибке, когда пытаюсь напечатать его в обратном порядке? Что не так?

#include <stdio.h>
#include <string.h>
void cnvrter(char *number);

int main(){
    char number[80];
    printf("enter a number ");
    gets(number);
    cnvrter(number);

    return 0;
}

void cnvrter(char *number){
    char tmp[80];
    int i = 0,len = 0;
    int cnvrtd_digit = 0;
    len = strlen(number);
    printf("\nsize of input %d\n",len);
    for(i = len; i>len ; i--){
        if ( ( number[i] >= '0' ) && ( number[i]<='9' ) ){
            tmp[0] = number[i];
            sscanf(tmp,"%d",&cnvrtd_digit);

        }
        printf("%d\n",cnvrtd_digit);
    }
}

Ответы [ 3 ]

3 голосов
/ 21 марта 2010

Посмотрите на ваш for цикл снова:

for(i = len; i>len ; i--){

Вы делаете i=len, а затем тестируете на i>len - если что-то не идет серьезно в задании, оно никогда не будетчтобы быть правдой ...

Кстати, хотя это и не связано, вы не должны использовать gets, даже в такой программе, которую вы никогда не собираетесь использовать серьезно.

1 голос
/ 22 марта 2010

Вам не нужен явный for -loop для обращения строки в C ++. Вы можете использовать std::reverse() или str.rbegin(), str.rend().

// -*- coding: utf-8 -*-
// $ g++ *.cc && (echo 'abc1d23e->١<-_ f999fff' | ./a.out)
#include <algorithm>  // remove_copy_if
#include <functional> // not1
#include <iostream>
#include <iterator>   // ostream_iterator
#include <string>

int main() {
  using namespace std;

  cout << "enter a number " << flush;               // print prompt
  string str; cin >> str;                           // read until first space
  cout << "\nsize of input " << str.size() << endl;

  remove_copy_if(
      str.rbegin(), str.rend(),                     // traverse in reverse order
      ostream_iterator<string::value_type>(cout, "\n"), // copy to stdout
                                                        // separated by newline
      not1(ptr_fun((int (*)(int))isdigit)));        // remove non-digits
}

Запустите его:

$ g++ *.cc && (echo 'abc1d23e->١<-_ f999fff' | ./a.out)
enter a number 
size of input 15
3
2
1
0 голосов
/ 21 марта 2010

Вы никогда не продвигаете индекс на tmp и никогда не завершаете его нулем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...