|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2010
Messaggi: 211
|
[C] Salvare una stringa dentro una variabile
Ciao, vorrei far acquisire una stringa da tastiera e salvarla dentro una variabile, come posso farlo con C ?
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
Se vuoi prendere una parola sola (cioè una stringa senza spazi) usi:
Codice:
scanf("%s", &str);
Codice:
gets(str); Codice:
fgets(str, sizeof(str), stdin); |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Nov 2010
Messaggi: 211
|
e di che tipo la devo dichiarare str?
un'altra domanda velocissima ma in C non si può verificare il contenuto di una variabile char? if(colonna == "a" OR colonna == "A"){ mi da errore In function `main': [Warning] comparison between pointer and integer syntax error before "OR" |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
OR non é un operatore in C.
prova a sostituirlo con || |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Nov 2010
Messaggi: 211
|
ok, adesso non mi da più errore
ma vorrei sapere, è possibile fare quel confronto? ho una struttura IF e salta sempre tutti i controlli arrivando all'else, anche se per il dato inserito dovrebbe eseguire altri blocchi di istruzione provando a stampare i dati sono quelli che ho inserito io |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Per le costanti char devi usare gli apici ', le virgolette " sono solo per le stringhe.
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Nov 2010
Messaggi: 211
|
funziona
grazie per l'aiuto |
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
Quote:
Per confrontare singoli caratteri usi i singoli apici, se invece vuoi confrontare le stringhe non puoi fare (ad esempio): Codice:
if (str == "ciao") Codice:
if (!strcmp(str, "ciao")) |
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Nov 2010
Messaggi: 211
|
pessimo sto C
io che ho imparato inizialmente il PHP mi, nonostante la sintassi sia molto simile, mi sembra molto più difficile il C, è molto più restrittivo. ho un altro problema sto cercando di creare una specie di tris [il gioco], per provarlo, copio il codice intero Codice:
#include <stdio.h>
#include <stdlib.h>
main(){
int riga;
char *a1, *a2, *a3, *b1, *b2, *b3, *c1, *c2, *c3, colonna;
char tris[181] = "\n\t\t A B C\n\t\t | | \n\t\t1 | | \n\t\t ___|___|___\n\t\t | | \n\t\t2 | | \n\t\t ___|___|___\n\t\t | | \n\t\t3 | | \n\t\t | | \n";
printf("Gioco del tris\n\n\n\n");
printf("%s", tris);
printf("\n\n");
a1 = &tris[34];
a2 = &tris[79];
a3 = &tris[124];
b1 = &tris[38];
b2 = &tris[83];
b3 = &tris[128];
c1 = &tris[42];
c2 = &tris[87];
c3 = &tris[132];
while(printf("Scegli la casella in cui scrivere la X nella forma A1 ")){
scanf("%c%d", &colonna, &riga);
if(riga > 3 || riga <= 0){
printf("\nERRORE: Numero riga sbagliato\n");
}else{
if(colonna == 'a' || colonna == 'A'){
if(riga == 1) *a1 = 'X';
if(riga == 2) *a2 = 'X';
if(riga == 3) *a3 = 'X';
printf("%s", tris);
break;
}else{
if(colonna == 'b' || colonna == 'B'){
if(riga == 1) *b1 = 'X';
if(riga == 2) *b2 = 'X';
if(riga == 3) *b3 = 'X';
printf("%s", tris);
break;
}else{
if(colonna == 'c' || colonna == 'C'){
if(riga == 1) *c1 = 'X';
if(riga == 2) *c2 = 'X';
if(riga == 3)*c3 = 'X';
printf("%s", tris);
break;
}else{
printf("\nERRORE: Lettera colonna sbagliata\n");
}
}
}
}
}
getch();
}
dice che bisogna inserirla di nuovo ed è tutto ok ma sbagliando una 2 volta non tiene conto dello scanf all'inizio del ciclo e come se si all'apparire del messaggio "Scegli la casella in cui scrivere la X nella forma A1 " si schiacciasse direttamente invio da tastiera ma io non premo nessun pulsante |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
il problema è derivato dal fatto che la libreria standard c bufferizza l'input, quindi in effetti quando scrivi una cosa e premi invio, dopo il parsing effettuato dalla scanf, nel buffer rimane un carattere \n che quindi viene preso dal prossimo scanf
soluzioni? 1) leggere, invece di usare scanf, con getline, che legge tutta una linea, e poi fare il parsing della stringa letta con getline attraverso sscanf 2) svuotare il buffer, ma è meglio non usare fflush e dovresti usare modi più macchinosi per farlo, ti consiglio la prima opzione |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:21.



















