Pomoc w dokończeniu kodu

0

Bardzo proszę o wskazanie mi, co muszę zrobić, żeby kompilator odrzucił możliwość wprowadzenia znaku + lub - pomiędzy "i" a samą cyfrę (czyli np. żeby wyświetlał "iincorrect input" przy wprowadzeniu 9+i+65)

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


int main(void) {
	
	int x,y;
	char idk;
	printf("liczba zespolona: ");
	int a=scanf("%d%ci%d", &x, &idk, &y);	
	if (a !=3 || idk != '+' && idk != '-') {
		printf("incorrect input\n");
		return 1;
	}
	
	int s=1; 
	if(idk=='-') s=-1;
	{
		printf("Czesc rzeczywista: %d\n", x);
		printf("Czesc urojona: %d\n", s*y);	}
	
	
	return 0;
}
0

Kompilator nie wykonuje Twojego programu, a jedynie generuje plik wykonywalny na podstawie tego co napisałeś (w dużym uproszczeniu).
Jeśli to czysty C, to raczej będziesz musiał sprawdzać znaki sąsiadujące z i.
Dla przykładu, jeśli Twój ciąg input[] wygląda tak: 65i+2, to i znajduje się na 3 pozycji. Ma indeks 2. Zatem musisz sprawdzić czy:
input[1] == '+'
input[1] == '-'
input[3] == '+'
input[3] == '-'
Oczywiście zawsze warto zadbać o pokrycie przypadków brzegowych ;)

edit: Podejście jakie zastosowałeś z użyciem scanf może być tutaj problematyczne, jeśli nie masz pewności co do poprawności ciągu lub jego konkretnego, pożądanego formatu.

Jeśli skupić się tylko na problemie, który podałeś to ja bym to zrobił na przykład tak:

int GetIndexOf( char* input, char searchedCharacter )
{
    unsigned int checkedIndex = 0;
    while( input && input[checkedIndex] != '\0' )
    {
        if( input[checkedIndex] == searchedCharacter )
        {
            return checkedIndex;
        }
        checkedIndex++;
    }
    /* No finding in the input string. */
    return -1;

int main( void )
{
    ...
    int plusCharacterIndex = GetIndexOf( input, '+' );
    if( plusCharacterIndex != -1 && input[plusCharacterIndex-1] != 'i' && input[plusCharacterIndex+1] != 'i' )
    {
        /* Data is correct */
    }
    ...
}

Oczywiście możesz też tą funkcję wykorzystać w pętli sprawdzając indeksy wszystkich plusów i minusów. Podałem jedynie przykład.

1

Czemu w naspie formatującym masz zarówno "i" i "%c"? To jest nielogiczne.

    if (2 != scanf("%di%d", &x, &y)) {
           printf("incorrect input\n");
    }

To nie zadziała dla wejścia typu: 4i--5 albo 4i+-4, ale wątpie by ci to przeszkadzało.

1 użytkowników online, w tym zalogowanych: 0, gości: 1