C言語 自然数の四則演算 エラー原因不明
プログラミング初心者です
自然数の四則演算のプログラムを作ったところ
コンパイル時にはエラーは起こりませんでしたが実行時にエラーが起こり、動作が停止してしまいました。
自分で原因が特定できなかったのでこちらを頼らせてもらうことにしました。
ご教授お願いします。
<環境>
Windows 7 Home Premium 64-bit
Visual Studio 2013
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
int main( void )
{
char str[2][128]={{0}};
int i,j,err=0,cont=0,wari=0;
double c,d,dans;
long a,b,lans;
puts("自然数の四則演算('+''-''*''/')を計算");
//被加数,被減数,被乗数,被除数と演算の判定
i=0;
while((str[0][i]=getchar())!='\n'){
if(str[0][0]=='+' || str[0][0]=='*' || str[0][0]=='/' || str[0][0]=='-'){
err=1;
}
if(str[0][i]=='+' || str[0][i]=='*' || str[0][i]=='/' || str[0][i]=='-'){
cont=1; //2つ目の数字を読み込むか否かの判定
break;
}else if(isdigit(str[0][i])==0){
err=1; //数字と演算方法以外の入力はエラー
}
i++;
}
//加数,減数,乗数,除数の判定
if(cont==1 && err!=1){
j=0;
while(str[1][j]!='\n'){
if(isdigit(str[0][i])==0){
err=1; //数字以外の入力があればエラー
}
j++;
}
str[1][j]='\0';
if(err==1){
printf("エラー入力");
return 0;
}
switch(str[0][i]){
case '+':
str[0][i]='\0';
a=atol(str[0]);
b=atol(str[1]);
lans=a+b;
break;
case '-':
str[0][i]='\0';
a=atol(str[0]);
b=atol(str[1]);
lans=a-b;
break;
case '*':
str[0][i]='\0';
a=atol(str[0]);
b=atol(str[1]);
lans=a*b;
break;
case '/':
str[0][i]='\0';
c=atol(str[0]);
d=atol(str[1]);
dans=(double)c/d;
wari=1; //割り算の判定
break;
default:
break;
}
}
if(err==0){
if(wari==0){
printf("計算結果:%ld\n",lans);
}else if(wari==1){
printf("計算結果:%f\n",dans);
}
}else{
printf("エラー入力です\n");
}
return 0;
}
お礼
回答ありがとうございます。 おかげで理解することができました。