2013-03-11 3 views
-1
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <math.h> 

int main(int argc, char *argv[]) { 

printf("Write in this format: <operand1> <operator> <operand2>\n"); 
double result, op1, op2; 

op1 = atof(argv[1]); 
op2 = atof(argv[3]); 

if(argv[2][0]=='+') 
    result = op1 + op2; 
if(argv[2][0]=='-') 
    result = op1 - op2; 
if(argv[2][0]=='/') 
    result = op1/op2; 
if(argv[2][0]=='x') 
    result = op1 * op2; 

printf("Result: %f", result); 

return 0; 
} 

Я пытаюсь выполнить эту работу, но это вызывает ошибку сегментации. Я проверил свой код, и я просто не могу найти с ним ничего плохого. Он должен работать как простой калькулятор. И затем я попробовал страницу man для argv или argc, и он говорит: «Нет ручного ввода для ...» что-то вроде этого. Я имею в виду, разве не должно быть одного? Или мне нужно что-то обновить? Буду признателен, если кто-нибудь ответит все, что он/она думает, что может помочь. Заранее спасибо!Аргумент командной строки: ошибка сегментации

+0

Я думаю, что это сообщение вне темы, но я все равно вам поможем. Какую команду вы вызываете в свою программу в свой вопрос? Почему вы используете 'argv [2] [0]' вместо 'argv [2]'? Вы уверены, что ваша функция 'atof()' работает **? – Lucio

+0

О, глупо меня. Предполагается, что он работает. Сейчас он работает. Благодаря! – 2013-03-11 01:39:05

+0

Это похоже на C, а не аргументы командной строки. Это МОЖЕТ быть лучше спрошено на SO, я вообще не вижу ничего общего с ubuntu здесь –

ответ

1

Ваш код имеет синтаксис/концептуальную ошибку в четырех условностях.

Вы запрашиваете argv[2][0], но это должно быть argv[2] вместо:

  • argv[2][0] означает: позиция Cero указателя на символ (плохо) в третьей позиции в массиве
  • argv[2] означает: содержание указателя на символ, который находится в третьем положении в массиве

Именно поэтому вы получаете ошибку Segmentation fault.

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