paulo1205
(usa Ubuntu)
Enviado em 26/09/2019 - 03:49h
Não ignore alertas que o compilador lhe dá. Tais alertas têm razão de ser — até no caso de variáveis que ainda não receberam valor (e o alerta está ali justamente porque o compilador detectou que você está tomando decisões a partir de valores não definidos).
kochem escreveu:
meu arquivo .C
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void) {
char s[300];
char texto[300];
char tam;
while (s != -1) {
Aqui você está comparando o endereço do primeiro elemento do vetor com o valor inteiro
-1. Possivelmente um dos alertas que você recebeu é a respeito da diferença de tipos (ponteiro para caráter × inteiro) dessa comparação, que acaba não fazendo sentido, e que, se levada a cabo, muitíssimo provavelmente será sempre falsa (i.e. o laço de repetição nunca será executado).
Além disso, eu suspeito que você gostaria de, de alguma maneira, comparar o conteúdo do vetor com o valor
-1, não o endereço que ele ocupa na memória. Para tanto, primeiro você deveria fazê-lo da forma correta, referindo-se especificamente ao conteúdo com algo como
s[n], sendo
n um valor inteiro menor que o tamanho do vetor, ou através de uma função que compare elementos sucessivos do vetor, tal como
memcmp() ou
strcmp(). E também seria muito importante que você populasse o vetor antes de fazer a primeira comparação de conteúdo, pois, na forma como está, o vetor começa com 300 elementos de valor indefinido, implicando que mesmo que, a comparação tivesse sido expressa na forma correta, ela produziria resultado imprevisível numa primeira ocorrência, já que os valores comparados seriam desconhecidos, quase aleatórios.
if (scanf("%lf", &s) != 1) {
Antes de apontar os erros na linha acima, quero parabenizá-lo por algo que é raro ver um iniciante — e mesmo alguns nem tão iniciantes assim — fazer, que e testar o valor de retorno de
scanf(). Mantenha esse hábito.
Porém, aqui também você tem um erro de incompatibilidade de tipos, para o qual possivelmente o compilador também emitiu um alerta, entre a especificação da conversão, que comanda a extração de um valor de ponto flutuante de dupla precisão (tipo
double), e o ponteiro para o local em que o valor extraído será guardado (cujo tipo é ponteiro para vetor de 300 elementos do tipo
char).
Se você quiser ler um valor do tipo
double, o segundo argumento deveria ser o endereço (ponteiro) para variável do tipo
double.
Se, por outro lado, você quiser ler uma sequência de caracteres, então tem de trocar tanto a especificação da conversão (para algo como
"%s" ou
"%[" — recomendo enfaticamente que você leia a documentação de
scanf()) quanto o destino dos dados extraídos, de modo que o tipo seja ponteiro para caracteres, em vez de ponteiro para vetor de caracteres. Alternativamente, você poderia usar outra forma de leitura, voltada especificamente para a leitura de linhas de texto, tais como
fgets() ou
getline(),
return 1;
}
if (s != -1) { // -1 sinaliza o final, e NÃO é somado
Aqui você repete o erro de comparar endereço (ponteiro) com inteiro, que é algo que não faz sentido.
A função
len() não existe como parte da biblioteca padrão do C. É algo que você implementou, ou você quis dizer
strlen()?
printf("TEXTO = %s\n", s);
for(int i=0;i<tam;i++){
printf("TEXTO = %s\n", s[i]);
}
}
}
return 0;
}
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)