Ir para conteúdo
Fórum Script Brasil
  • 0

Uso de %c e %s


princknoby

Pergunta

Olá a todos , estou com uma dúvida imagino eu que bem de principiante. 

A relação da dúvida está nas linhas 34 e 59.

O programa é o seguinte, preciso capturar uma string de tamanho 50, ver se na string possui alguma vogal, e se possuir pedir para o usuário digitar um novo caractere, e depois imprimir uma nova string substituindo todas as vogais por esse caractere digitado. 

E minha dúvida: Por que pra capturar o novo caractere eu preciso usar %c mas para imprimir eu preciso usar %s? Tentei capturar e imprimir com %c e não deu certo, tentei capturar com %s também não deu certo, e tentei capturar também usando gets(); também sem sucesso, só deu certo capturando %c e imprimir %s, procurei a diferença dos dois na internet, não consegui encontrar nada que sanasse minha dúvida.

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

int main ()
{
	char string[50], n;
	int i, x, qv=0, verdadeiro=1; /*DECLAREI ESSA VARIAVEL PARA SABERMOS SE PRECISAMOS
	OU não PEDIR PARA QUE O USUARIO DIGITE UM NOVO CARACTERE*/
	char vogais[11] = {'a','A','e','E','i','I','o','O','u','U'};

	printf ("Digite a string: ");
	gets(string);

	for (i = 0; i < string[i] != '\0'; i++) /*DECOBRIR QUANTAS VOGAIS TEM*/
	{
		for (x = 0; x < vogais[x] != '\0'; x++)
		{
			if (string[i] == vogais[x])
			{
				qv++; /*SOMA +1 TODAS AS VEZES QUE TIVER ALGUMA VOGAL*/
				verdadeiro=0; /*SE ENTROU NO BLOCO SIGNIFICA QUE TEM VOGAIS
				PORTANTO PRECISAMOS CAPTURAR OUTRO CARACTERE DO USUARIO*/
			}

			else {} /*SE não TEM VOGAL não FAZ NADA*/
		}
	}

	if (verdadeiro == 0)/*SE TIVER VOGAL ATRIBUI 0 PARA verdadeiro, então
	SE VERDADEIRO FOR IGUAL A 0 (ZERO) PEDIMOS OUTRA VARIÁVEL AO USUARIO*/
	{
	printf ("Digite um novo caractere para substituir as vogais da string: "); /*PEDIMOS NOVO CARACTERE*/
	scanf ("%c", &n); /*####DÚVIDA####*/
	}

	else /*MAS SE não TIVER ENTRADO DO BLOCO QUE VERIFICA SE TEM VOGAL
	VERDADEIRO VAI TER O VALOR 1 DEFINIDO NA NO INICIO DO CODIGO
	E SE TEM VALOR 1 SIGNIFICA QUE não TEM VOGAL
	então ENCERRAMOS O PROGRAMA AQUI*/
	{
		printf ("\nEssa string não possui vogais!\n\n");
		exit (0);
	}

	for (i = 0; i < string[i] != '\0'; i++) /*caso o programa chegue ate aqui
	ele ira atribuir o novo caractere a todas as vogais da string*/
	{
		for (x = 0; x < vogais[x] != '\0'; x++)
		{
			if (string[i] == vogais[x])
			{
				string[i]=n;
			}
		}
	}

	printf ("A string possuia %d vogais!\n", qv);/*imprimri quantas vogais a string possuia*/
	printf ("Agora nossa nova string é: %s\n\n", string); /*IMPRIMI A NOVA STRING*/ /*####DUVIDA####*/

	system ("pause");
	return 0;
}

 

Comentei as linhas que estou com dúvida.

EDIT: Comentei o código todo e adicionei algumas outras coisas ao programa(verificar se vai ser necessário pedir outro caractere ao usuário).

Desde já, obrigado.

Editado por princknoby
formatação, comentários
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Olá, @princknoby Rodei seu código do modo como você postou nesse site:

https://www.onlinegdb.com/

e funcionou corretamente, ou seja, você está fazendo a leitura da string informada pelo usuário corretamente e do caractere também.

Só que tem um ponto que é preciso frisar: Evite o uso do comando gets para ler uma string (Esse comando é considerado perigoso, e, no Visual Studio ele nem é mais aceito)

No material que estou recomendando abaixo tem um exemplo de como ler uma string de maneira correta:

char cidade[81];
...
scanf(" %80[^\n]", cidade); /* lê no máximo 80 caracteres */
... 

É assim mesmo. Se você colocar no scanf apendas o %s vai ser lido apenas a primeira palavra da frase e não toda a frase, como deveria. Faz o teste aí para ver! No tutorial abaixo é explicado detalhadamente a respeito desse código que coloquei

Outro exemplo:

char string[50]; // aqui você está criando uma string
char n; // aqui você está criando uma variável do tipo char

Basicamente, com respeito a sua dúvida, para imprimir um caractere (char) se uso o %c, já para imprimir uma string em C é o %s

Seria bom procurar entender bem a respeito de strings em C, que nada mais são do um vetor de caracteres (vetor de char)

Se seu interesse é aprender bem sobre strings e variáveis do tipo char o material que comentei acima é esse:

http://www.ic.unicamp.br/~ra069320/PED/MC102/1s2008/Apostilas/Cap06.pdf

Se ainda tiver dúvidas é só perguntar, ok?

Obs: Gostei de ver o uso correto das chaves em seu código! 

Outro ponto é que você demonstra um claro e grande interesse em aprender. Continue assim e você vai longe!

Cara, detona aí no C! 😉

Editado por Visitante
Atualizar comentário
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...