Dubbio sul conteggio dei caratteri di una stringa!

di Vincenzo.79 il
5 risposte

Ho eseguito questo codice in due modi; se la stringa è salvata nel data del programma, il programma funziona bene...

Il problema sorge nel momento in cui la stringa è inserita dall'utente...mi conta sempre un carattere in più e non riesco proprio a capire perchè.

Grazie a chi mi risponde...

di seguito il codice:

.data 
	in_string: 		.asciz " Inserisci una frase: "
	dim_string:		.space 25
	null_string: 	.asciz "\n La stringa è vuota!"

.text
.globl _main
_main:
	la a0, in_string
	li a7, 4
	ecall
	
	la a0, dim_string
	li a1, 25
	li a7, 8
	ecall
	
	li t0, 0		# Contantore
loop:
	lb t1, 0(a0)
	beqz t1, fine
	addi t0, t0, 1
	addi a0, a0, 1
	j loop

fine:
# --- Fine del Programma --- #
li a7, 10
ecall

5 Risposte

  • Ehm... Totale cicli -1?

    Oppure esci dal loop anche con il tasto invio.

    Così conti zero se l'utente non scrive niente...

  • In effetti se l'utente non inserisce nulla premendo invio, il programma termina...

    Invece se inserisco ad es: "Ciao Mondo" che sono 10 char, in t0 ne vengono contati 11...

  • 03/07/2026 - Vincenzo.79 ha scritto:

    Invece se inserisco ad es: "Ciao Mondo" che sono 10 char, in t0 ne vengono contati 11...

    Perché tutto si ferma quando confermi con invio

     \10

    Questo lo devi escludere

    1 2 3 4 5 6 7

    P i p p o \10 \n

    Tu escludi 7 cioè \n devi escludere anche invio. Per questo se lo passi da codice funziona, perché da codice non gli dai invio.

    (Mi ricorda i tempi del CNC tornio e fresa).

  • 03/07/2026 - sihsandrea ha scritto:

    03/07/2026 - Vincenzo.79 ha scritto:

    Invece se inserisco ad es: "Ciao Mondo" che sono 10 char, in t0 ne vengono contati 11...

    Perché tutto si ferma quando confermi con invio

     \10

    Questo lo devi escludere

    1 2 3 4 5 6 7

    P i p p o \10 \n

    Tu escludi 7 cioè \n devi escludere anche invio. Per questo se lo passi da codice funziona, perché da codice non gli dai invio.

    (Mi ricorda i tempi del CNC tornio e fresa).

    Fallo uscire dal loop al tasto invio.

  • Ma grazie...credo di aver risolto...con una riga di codice dopo il controllo se la frase è vuota...

    ha fatto in questo modo:

    loop:
    	lb t1, 0(a0)
    	beqz t1, fine
    	beq t1, t2, fine		# Controllo per evitare il conteggio del carattere terminatore
    	
    	addi t0, t0, 1
    	addi a0, a0, 1
    	j loop
Devi accedere o registrarti per scrivere nel forum
5 risposte