Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C]chiusura file dopo input utente specifico

    Volevo sapere come era possibile chiudere un programma dopo che l'utente scriva FINE, praticamente il mio programma prende in input un int un char e un int che sarebbero un operazione del tipo 3+2.
    questo chiede l'operazione ogni volta che rientra nel while e io voglio che esca dal while e quindi dal programma quando proprio l'utente scriva FINE.
    come posso fare?
    avevo pensato ad un if però con quale condizione? perchè lo scanf legge un int un char e un int e non 4 char o una stringa

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usa una scanf con un array di char apposito per l'inserimento di una parola per chiudere il programma o un'altra per continuare.

    Confronta l'array di char (tramite la strcmp) e opera di conseguenza.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    no proprio non ho capito come fare...come faccio attraverso uno scanf a vedere un array di char?
    codice:
    char *risposta[10];
    printf("Scrivi FINE o CONTINUA per andare avanti");
    scanf("%s",&risposta);
    if((strcmp('FINE',&risposta)==0){
              break;}
    else
          continue;
    giusto?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    char *risposta[10];

    è un array di puntatori a char. Tu devi usare semplicemente

    char risposta[10];

    Di conseguenza

    scanf("%s", risposta);

    e

    if(strcmp(risposta, "FINE")==0) break;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    grazie mille funziona tutto come deve

  6. #6
    ora dovrei chiudere invece un server attraverso sempre lo stesso input dato da tastiera da parte del client....purtroppo però non funziona questa cosa perché? cioè il server rimane sempre aperto...
    eppure nella stringa inputline c'è fine...
    ecco qua il codice sia di client che del server:
    SERVER:

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <ctype.h>
    #include <sys/socket.h>
    #include <string.h>
    #include <netinet/in.h>
    #define MAXLENGTH 80
    #define SERVERPORT 1313
    
    
    void minuscolatore (int in,int out){
        char inputline[MAXLENGTH];
        int len,i;
        while((len=recv(in,inputline,MAXLENGTH,0))>0){
            for(i=0;i<len;i++){
                inputline[i]=tolower(inputline[i]);
            }
            send(out,inputline,len,0);
        }
    }
    void maiuscolatore(int in,int out){
        char inputline[MAXLENGTH];
        int len,i;
        while((len=recv(in,inputline,MAXLENGTH,0))>0){
            for(i=0;i<len;i++){
                inputline[i]=toupper(inputline[i]);
            }
            send(out,inputline,len,0);
        }
    }
    int main(){
        int sock,client_len,fd;
        char c;
        struct sockaddr_in client, server = {AF_INET,htons(SERVERPORT),INADDR_ANY};
        if((sock=socket(AF_INET,SOCK_STREAM,0))==-1){
            perror("Socket fallita");
            exit(1);
        }
        if(bind(sock,(struct sockaddr *)&server,sizeof server)==-1){
            perror("Bind fallita");
            exit(2);
        }
        listen(sock,5);
        while(1){
            client_len=sizeof(client);
            if((fd=accept(sock,(struct sockaddr *)&client,&client_len))<0){
                perror("accept fallita");
                exit(3);
            }
            if (recv(fd,&c,1,0)==-1){
                perror("recv server fallita");
                exit(4);
            }
            if (c=='+'){
            switch(fork()){
                case -1:
                    perror("Fork fallita");
                    exit(4);
                case 0:
                    printf("Aperta connessione\n");
                    maiuscolatore(fd,fd);
                    printf("Chiusa connessione\n");
            }
        }
            else if (c=='-'){
            switch(fork()){
                case -1:
                    perror("Fork fallita");
                    exit(4);
                case 0:
                    printf("Aperta connessione\n");
                    char inputline[MAXLENGTH];
                    int len,i;
                    while((len=recv(fd,inputline,MAXLENGTH,0))>0){
                            for(i=0;i<len;i++){
                                    inputline[i]=tolower(inputline[i]);
                            }
                   send(fd,inputline,len,0);
                   printf ("\n%s\n",inputline);
                   if (strcmp(inputline,"fine")==0){
                       printf ("\nChiudo il server");
                       break;
                   }
                    }                
                    printf("Chiusa connessione\n");
            }   
            }
            close(fd);
        }
    }
    CLIENT:
    codice:
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <ctype.h>
    #include <sys/socket.h>
    #include <string.h>
    #include <netinet/in.h>
    #define MAXLENGTH 80
    #define SERVERPORT 1313
    
    int main(){
        int sockfd;
        struct sockaddr_in server={AF_INET,htons(SERVERPORT),INADDR_ANY};
        int i=0, len;
        char buf[MAXLENGTH],c,d;
        if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
            perror("socket fallita");
            exit(1);
        }
        if (connect(sockfd, (struct sockaddr *) &server,sizeof server)==-1){
            perror("connect fallita");
            exit(2);
        }
        printf("\nDigita una stringa :");
        while((c=getchar())!='\n' && i<MAXLENGTH){
            if(isalpha(c)!=0){
                    buf[i++]=c;}
            else{
                i++;
            }
        }
        buf[i]='\0';
        len=strlen(buf);
        printf("\nScrivi + se vuoi tutto maiuscolo e - se vuoi tutto minuscolo:");
        d=getchar();
        if (send(sockfd,&d,1,0)==-1){
            perror("send d fallita");
            exit(4);
        }
        printf("\nInvio la stringa al server...\n");
        if(send(sockfd,buf,len,0)==-1){
            perror("send fallita");
            exit(4);
        }
        if(recv(sockfd,buf,len,0)>0){
            printf("Ho ricevuto la risposta: %s\n",buf);
        }
        else{
            perror("seconda receive fallita");
            exit(3);
        }
        close(sockfd);
        exit(0);
    }

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quasi impossibile risponderti ... fai un po' di debugging linea per linea per individuare almeno la zona di codice coinvolta nel malfunzionamento.

    P.S. Essendo un nuovo problema, dovresti aprire un nuovo thread e non continuare in questo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    è praticamente che fine in inputline non è proprio fine ma è seguita da altri caratteri strani che non riconosce il terminale...non da nessun tipo di errore...solo che non entra nell'if
    ho continuato questa discussione perché si parla della stessa cosa in fondo

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma dopo la parola fine esiste il carattere nul (0 binario) terminatore della stringa?

    Se non c'è la strcmp non può funzionare ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    ci sono riuscito...grazie purtroppo però non riesco a chiudere il server, adesso entra nell'if ma non chiude il server

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.