基本上我得到这个for循环,我希望反向打印出的数字(例如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);
}
}
答案 0 :(得分:3)
再次查看for
循环:
for(i = len; i>len ; i--){
你正在做i=len
,然后测试i>len
- 除非在作业中出现严重错误,否则这将永远不会成真......
顺便说一下,虽然它没有关联,但你不应该使用gets
,即使在这样的程序中你也不打算使用它。
答案 1 :(得分:1)
您不需要显式for
- 循环来反转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
答案 2 :(得分:0)
您永远不会在tmp
上推进索引,并且永远不会将其终止。