2016-10-19 19 views
-1

私は2つのファイルを送信していますが、もう1つはパイプを使ってcharを受け取っていますが、うまくいきましたが、メッセージを受け取った後、そのcharを整数に変換し、チャーの上に何がありますか?Cでcharから2つの数値を追加するにはどうすればよいですか?

基本的に "3 + 4"を7とどのように解析できますか?ここで

私write.cは

#include <fcntl.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <unistd.h> 

int main() 
{ 
int fd; 
char * myfifo = "/tmp/myfifo"; 

/* crear FIFO */ 
mkfifo(myfifo, 0666); 

/* escribir al FIFO */ 
fd = open(myfifo, O_WRONLY); 
write(fd, "3+4", sizeof("3+4")); 
close(fd); 

/* remover FIFO */ 
unlink(myfifo); 

return 0; 
} 

であり、これは(汎用計算ではなくお尻)2つの番号を追加する方法についてだけであれば、これは

#include <fcntl.h> 
#include <stdio.h> 
#include <sys/stat.h> 
#include <unistd.h> 

#define MAX_BUF 1024 

int main() 
{ 
int fd; 
char * myfifo = "/tmp/myfifo"; 
char buf[MAX_BUF]; 

/* open, read, and display the message from the FIFO */ 
fd = open(myfifo, O_RDONLY); 
read(fd, buf, MAX_BUF); 
printf("Received: %s\n", buf); 
close(fd); 

return 0; 
} 
+1

私は 'write(....、strlen(" 3 + 4 ")の代わりに' write(fd、 "3 + 4"、sizeof( "3 + 4"));を呼び出す限り、 3 + 4 "));' –

+0

コードを書式設定/インデントしてください。 –

+0

あなたが受け取ったメッセージを解析するために今まで何を試しているのかを教えてください –

答えて

1

私read.cである理由はありません"3,4"を送信してください。

"、"で文字列を分割してください。ヒント - strchrを使用する

2つの部分文字列を整数に変換します。ヒント使用アトール

今すぐ追加します。ヒント使用+

0

算術式を取得するには、文字列を解析する必要があります。コメント者はすでにこう言っています。そのような質問は、表現がどれだけ複雑になるかによって、そうする方法がたくさんあるため、ここでは広すぎます。 - s1 + s2またはs1 - s2以上ではない、ない否定または他の何か - 2つの正の整数の単純な加算/減算のためには、この非常に簡単な例を使用することができます

#include <stdio.h> 
#include <stdlib.h> 

// ALL CHECKS OMMITTED! 

#define ADD 1 
#define SUB 2 

int parse(char *s) 
{ 
    int op1 = 0, op2 = 0, res = 0, operator= 0, next = 0; 
    for (;;) { 
    switch (*s) { 
     case '0': 
     case '1': 
     case '2': 
     case '3': 
     case '4': 
     case '5': 
     case '6': 
     case '7': 
     case '8': 
     case '9': 
     // may over/underflow, check! 
     if (next == 0) { 
      op1 *= 10; 
      op1 += *s - '0'; 
     } else if (next == 1) { 
      op2 *= 10; 
      op2 += *s - '0'; 
     } 
     break; 
     case '+': 
     operator = ADD; 
     next = 1; 
     break; 
     case '-': 
     operator = SUB; 
     next = 1; 
     break; 
     case '\0': 
     // may over/underflow, check! 
     if (operator == ADD) { 
      res = op1 + op2; 
     } else if (operator == SUB) { 
      res = op1 - op2; 
     } 
     break; 
     default: 
     // just ignore everything else for now 
     break; 
    } 
    if(*s == '\0'){ 
     break; 
    } 
    s++; 
    } 
    return res; 
} 

int main() 
{ 
    char *s = "3 + 4"; 
    printf("%s = %d\n",s, parse(s)); 
    s = "3 - 4"; 
    printf("%s = %d\n",s, parse(s)); 
    exit(EXIT_SUCCESS); 
} 

をそして、それ非常にではあるがシンプルであまり使われていないのは、すでにかなり複雑です。あなたはそれを拡張することができます - いくつかの拡張 - しかし、あなたは非常に迅速に制限に達するでしょう。

算術演算の行以上のものがある場合は、例:「中置式を解析する」または類似の箇所などを参照するのに時間がかかることがあります。 Googleで初めてヒットしたのは、Shunting-Yard algorithmに関するウィキペディアのページです。これはあなたに良いスタートを与えるはずです。それは非常に興味深いものですが、夕方半分だけでは学ぶことはありません。

関連する問題