2015-09-02 3 views
2

Почему мой код ничего не показывает для ввода 10 5 3. Он работает для всего до 1 до 9, но всякий раз, когда он идет 10 или больше, чем 10, тогда не отображается вывод. Я также пытаюсь использовать atoi() для него, но ошибка в этой строке int x = str [j] - '0'. Пожалуйста, помогите мне.Невозможно преобразовать символ в целое число в C++ в цикле

#include<iostream> 
#include<string> 
#include<cstdlib> 
using namespace std; 
int main() 
{ 
    int n, sum = 1, num = 0; 
    string str; 
    cin >> n; 
    for(int i = 0; i <= n; i++) { 
     getline(cin, str); 
     for(int j = 0; j < str.length(); j++) { 
      if(str[j] != ' ') { 
       int x = str[j] - '0'; // Here is the problem even I use atoi() but error 
       sum *= x; 
       num = sum; 
      } 
     } 
     if(num != 0) { 
      cout << num << endl; 
      num = 0; 
      sum = 1; 
     } 
    } 
} 
+0

Когда 'x' равно 0, что означает' sum * = x' do? – Barmar

+1

Вы умножаете все цифры. Когда вы умножаетесь на 0, вы получаете 0. – Barmar

+0

что делать вместо этого, чтобы преобразовать символ в целое число в этом случае –

ответ

0

Это не ясно из вашего поста, почему у вас есть два переменных num и sum. Это кажется излишним.

Предполагая, что вам просто нужно num, замените строки

sum *= x; 
num = sum; 

по

num = (10*num + x); 

, чтобы получить номера правильно.

Кроме того, когда вы сталкиваетесь с пространством, вам необходимо сбросить num до 0. В противном случае вход 10 8 будет обрабатываться как 108.

for(int j = 0; j < str.length(); j++) { 
    if(str[j] != ' ') { 
     num = (10*num + x); 
    } else { 
     // Use num and then reset it 0 
     // ... 
     num = 0; 
    } 
} 
Смежные вопросы