Pointerlarla ilgili kaygı

Başlatan yesenek, 23 Mart 2023 - 17:40:39

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

yesenek

Merhabalar. C öğrenmek için iki sayı arasında aritmetik işlemelr yapan ve çift tırnaklı ifadeleri ekrana yazdıran küçük bir program yazmaya çalışıyorum.
Fakat kafama takılan şeyler var. Ben pointer stringleri "token" adıyla okutuyorum. Fakat bu pointerlara bir bellek göstermiyorum. Bu bir sorun mudur merak ediyorum açıkçası.
Ayrıca girdileri program kapatıldığında silinen bir dosyaya yazdırıyorum. Yapabilirsem ilerde bu dosyayı belirli girdilerle okutup işlemeyi düşünüyorum.




#include <stdio.h>
#include <stdlib.h>
#include <regex.h>
#include <signal.h>
#include <string.h>
#include <ctype.h>
#include <stddef.h>
#include <math.h>

#define endless for(;;)

int main(void){
    char *saveptr;
    char input[512];
    float val;
    float val2;
    float opresult;
    FILE *fp;
    printf("Minimalis -type esc to quit- >>>\n");
    endless {
        scanf("%512[^\n]%*c", input);
        fp=fopen("temp.txt","a+");
        fprintf(fp, "%s", input);
        fprintf(fp, "\n");
        fclose(fp);
        char first = input[0];
        char last = input[strlen(input)-1];
        if (last == '"' && first == '"') {
            char *result = input + 1;
            result[strlen(result)-1] = '\0';
            printf("%s", result);
            printf("%s", "\n");
        }
        else if (first == '/') {
            char *token = strtok_r(input, " ", &saveptr);  //pointer stringler
            char *token2 = strtok_r(NULL, " ", &saveptr); //pointer stringler
            char *token3 = strtok_r(NULL, " ", &saveptr); //pointer stringler
            char *token4 = strtok_r(NULL, " ", &saveptr); //pointer stringler
            char *token5 = strtok_r(NULL, " ", &saveptr); //pointer stringler
            if ( token3[0]== '*' && token3[1] == 0 && token5 == NULL){
                val = atof(token2);
                val2 = atof(token4);
                opresult = val * val2;
                printf("%f", opresult);
                printf("\n");
                main();
            }
            else if ( token3[0]== '+' && token3[1] == 0 && token5 == NULL){
                val = atof(token2);
                val2 = atof(token4);
                opresult = val + val2;
                printf("%f",  opresult);
                printf("\n");
                main();
            }
            else if ( token3[0]== '/' && token3[1] == 0 && token5 == NULL){
                val = atof(token2);
                val2 = atof(token4);
                opresult = val / val2;
                printf("%f",  opresult);
                printf("\n");
                main();
            }
            else if ( token3[0]== '-' && token3[1] == 0 && token5 == NULL) {
                val = atof(token2);
                val2 = atof(token4);
                opresult = val - val2;
                printf("%f",  opresult);
                printf("\n");
                main();
            }
            else if ( token3[0]== '*' && token3[1] == '*' && token3[2] == 0 && token5 == NULL) {
                val = atof(token2);
                val2 = atof(token4);
                opresult = pow(val, val2);
                printf("%f",  opresult);
                printf("\n");
                main();
            }
            else if ( token5 != NULL) {
                printf("%s",  "Too many arguments given");
                printf("\n");
                main();
            }
        }
        else if (first == 'e'&& input[1] == 's'&& input[2] == 'c' && input[3] == 0){
            char bos[1] = {0};
            fp=fopen("temp.txt","wb+");
            fwrite(bos, sizeof(input), 1, fp);
            fclose(fp);
            remove("temp.txt");
            exit(0);
        }
    }
    return 0;
}