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

Variável


Denis Bittencourt Muniz

Pergunta

Fala galera.net!

Tenho esse código:

using System;

public class Texto{

	public string Valor;

	public void Imprimir(){
  Console.Write(Valor);
	}

	public void Som(uint repetir){
  uint x;
  for(x=0; x!=repetir; x++){
  	Console.Write("\a");
  }
	}

	public static void Main(){
  
  uint vezes;
  
  Texto obj = new Texto();
  obj.Valor = "Denis\n";
  obj.Imprimir();
  obj.Valor = "Teste\n";
  obj.Imprimir();
  
  obj.Valor = "Digite o número de Beep's que quer ouvir: ";
  obj.Imprimir();
  
  if(System.Convert.ToUInt16(Console.ReadLine()) > 32767){
  	System.Console.Write("Número inválido!\a");
  }else{
  	vezes = System.Convert.ToUInt16(Console.ReadLine());
  }
  
  
  
  obj.Som(vezes);      //Dá erro, linha 47

  System.Windows.Forms.Application.Run();
	}

}

Queria saber porque a linha 47 dá o seguinte erro: "Use of unassigned local variable 'vezes' "

Falows!

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Porque você não atribui valor nenhum à variável. Note que somente se entrar no else é que "vezes" terá algum valor. No caso, você tinha que trocar...

if(System.Convert.ToUInt16(Console.ReadLine()) > 32767){
  System.Console.Write("Número inválido!\a");
 }else{
  vezes = System.Convert.ToUInt16(Console.ReadLine());
 }
... por:
try {
  vezes = System.Convert.ToUInt16(Console.ReadLine());
}
catch (Exception erro) {
  vezes = 0; // Não tenho certeza se isso é válido para uint, se não for basta converter
  System.Console.Write("Número inválido!\a");
}

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

valeu Graymalkin! Deu certo! mas uma última dúvida:

Eu digitei '33000' e o programa aceitou... No caso, o programa iria fazer 32767 BEEP's e depois iria aparecer a frase "Número inválido"?

Mais uma coisa:

if(System.Convert.ToUInt16(Console.ReadLine()) > 32767){
 System.Console.Write("Número inválido!\a");
}else{
 vezes = System.Convert.ToUInt16(Console.ReadLine());
}

No Visual Basic, esse trecho não daria erro, certo? Mas porque dá erro em C#?

valeu! Falows!

Link para o comentário
Compartilhar em outros sites

  • 0

valeu Graymalkin! Deu certo! mas uma última dúvida:

Eu digitei '33000' e o programa aceitou... No caso, o programa iria fazer 32767 BEEP's e depois iria aparecer a frase "Número inválido"?

Por que isso ocorreria? unsure.gif O "u" na frente do tipo é de unsigned (ou seja, "sem sinal"), o que significa que um uint16 pode guardar um valor entre 0 e 65535.

Mais uma coisa:
if(System.Convert.ToUInt16(Console.ReadLine()) > 32767){
 System.Console.Write("Número inválido!\a");
}else{
 vezes = System.Convert.ToUInt16(Console.ReadLine());
}

No Visual Basic, esse trecho não daria erro, certo? Mas porque dá erro em C#?

Na verdade, achei esse trecho de código muito estranho. Note que no if você pede um valor que não será utilizado em lugar algum (não está sendo atribuído à ninguém). E somente se o cara digitar um valor maior que 32767 é que lhe será requisitado *novamente* um valor (o ReadLine() dentro do else) e aí sim esse valor será guardado em "vezes". Ou seja, se o cara digitar 120 (no ReadLine() do if), este valor não será utilizado em lugar algum e "vezes" continuará vazio.

E sim, no VB não daria erro porque "vezes" teria o valor de 0. Já em C# todas as referências são inicializadas com null.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

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