2013-04-28 7 views
0

Я пытаюсь создать программу, которая может «читать» ввод в два целых числа. .Извлечение целых чисел из строк

What is 20 plus 20

Программа должна «читать» 20 и 20. Я пытался использовать sscanf, но весьма специфична, например,

int a; int b; 
sscanf(INPUT, "What is %i plus %i" , &a, &b) 

Но это фактически зависит от пользователя, который вводит именно «Что такое x плюс y». Я пробовал использовать atoi, но безрезультатно.

Код (для соответствующих функций):

int main() 
{ 

while(1) 
{ 
takeInput(); 
PERFORMED_CALC = calcToPerform(); //PERFORMED_CALC checks the operation to perform, e.g. + , -, x or/
printf(" = %i\n", performCalculation()); //PerformCalculation Interprets and solves any sums 
} 

return 0; 
} 

Ниже для performCalculation():

int performCalculation() 
{ 
int a = 0; int b = 0; 


switch(PERFORMED_CALC) 
{ 
    case 1: 
    { 
    sscanf(INPUT, "What is %i plus %i", &a,&b); 
    return a+b; 
    break; 
    } 
} 
} 

Идеи?

+0

Мне пришлось отказаться от вашего вопроса из-за нехватки времени, но вы имели в виду напечатать «Что есть ...»? если это так, вы можете просто использовать printf и scanf вместе в одной строке. – MasterMastic

+2

Как выглядит ввод в общем случае? Вы должны определить проблему, прежде чем сможете ее решить. – interjay

+0

Анализ входной формы свободной формы в C будет болезненным, но посмотрите на [strtok()] (http://man7.org/linux/man-pages/man3/strtok.3.html) ... или подумайте о переходе на более высокий язык. – tripleee

ответ

1

Вы можете использовать strtok, чтобы разделить строку на жетоны. Затем вы можете использовать strtod, чтобы попытаться преобразовать каждый токен в число. Вы можете проверить second argument из strtod, чтобы узнать, удалось ли преобразование. Если это так, вы можете добавить число в список.

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