-
Posts
6.526 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que arfneto postou
-
C Maior e menor número aleatório
arfneto respondeu ao tópico de Hugo Cardozo de Oliveira em C/C#/C++
Não, não precisa de vetores e usar só vai tornar mais difícil e não mais fácil escrever o programa. Aumente a lista para int menor = 0; int maior = 0; int maior_q_50 = 0; E apenas mantenha atualizada ao gerar os números. Entenda que números podem ser negativos. não precisa da média, só da soma porque pode só dividir na hora de mostrar, porque só vai fazer isso: mostrar a média. para saber o menor só precisa de dois para saber o maior só precisa de dois: o maior até aqui e o que saiu agora no sorteio rand() retorna um inteiro positivo entre zero e RAND_MAX, um número grande. Divida por cem e veja o resto: vai ter um número entre 0 e 99. O enunciado não diz se é inclusivo o 100 então deixe como está. O operador que faz isso é 0 % --- módulo. int x%100 vai dar isso: o resultado do resto a divisão de x por 100. Mas você pode simplesmente fazer as contas também... não se esqueça de mostrar os números para saber se o número é maior que 50, um if e uma soma. adicionado 7 minutos depois Tem certeza que precisa desses comentários? Apenas mostre os valores conforme vão saindo no sorteio e atualize as variáveis como te falei. Seu programa está complicado sem necessidade. E não funciona. Esqueça esse lance de vetor. É bobagem. E você não pode escrever isso /* Variaveis */ int i,x; // i=contador int vet[x]; float soma=0,media; // soma=soma dos valores aleatorios; media=media dos valores aleatorios int maior,menor; // maior=maior nº aleatorio; menor=menor nº aleatorio O número de elementos do vetor tem que ser constante. Não pode ser x. E não precisa de um vetor Tem certeza de que precisa desses comentário? /* variaveis */ ? O que se pode esperar de uma lista de declarações? Constantes, variáveis, funções, essas coisas. Não precisa da média Não use acentos Evite declarar mais de uma variável por linha. Em muitos lugares é obrigado. E é grátis. Inicialize todas as variáveis. Em especial umas tipo maior e menor -
C Maior e menor número aleatório
arfneto respondeu ao tópico de Hugo Cardozo de Oliveira em C/C#/C++
Se precisa apenas do maior e do menor bastam duas variáveis. Que tal int menor = 0; int maior = 0; por exemplo? Não, não precisa de um vetor. Não precisa da media se só vai imprimir Não precisa incluir time.h e chamar time() apenas porque está usando rand(). Sequer precisa chamar srand(). No seu caso é melhor até usar um valor conhecido para srand() ao invés de time(). Sugiro usar algo como ano/mes/dia/hh por exemplo. Ou nunca vai poder conferir os resultados. srand(20081908); já serviria -
???? Use o cmd ou o Terminal do Windows. Digite lá o nome de seu programa. Só isso. A janela do IDE é um ambiente diferente. Seu programa pode mostrar um resultado lá e somente lá. Há programas que só rodam na janela do IDE. Compilados depois para produção ou na máquina do professor eles não rodam mais... Existe o código de produção --- o tal Release Build --- que não faz tantos testes, não gera tanto código de diagnóstico e é muito mais compacto, rápido e otimizado. Só que é outro. E é esse outro que você quer rodar, entregar ou vender. Ninguém mais vai compilar o seu programa. Em resumo, quando seu programa está ou parece ok, PARE de rodar no ambiente tosco do IDE. E rode no Terminal do Windows. É o recomendado. É mais esperto, mais seguro e mais rápido.
-
Está programando em C, com a API do Windows, então pode fazer qualquer coisa Eis um trecho que muda a fonte // muda a fonte para Courier New CONSOLE_FONT_INFOEX fonte; fonte.cbSize = sizeof(CONSOLE_FONT_INFOEX); fonte.nFont = 0; fonte.dwFontSize.X = 10; fonte.dwFontSize.Y = 20; lstrcpyW(fonte.FaceName, L"Courier New"); fonte.FontFamily = 54; fonte.FontWeight = 400; res = SetCurrentConsoleFontEx(config->o_handle, 0, &fonte); if (res == 0) { printf("SetCurrentConsoleFontEx() falhou: %d\n", GetLastError()); return (-1); }; // if() É só preencher um formulário, do jeito Windows de ser. Mas entenda que deve salvar a fonte que estava em uso antes, e depois restaurar ao final. Eu já te mostrei isso... Está nas propriedades da janela Não rode os programas no Dev-C++ ou qualquer IDE. É outro ambiente. Use o Terminal do Windows ou o CMD. Leu a documentação na primeira tela do link que eu te mandei? Eu não me lembro da razão mas sempre uso ambas. Mas se vai usar uma só deve ser a da página de saída.
-
? Você leu tudo que eu escrevi? Não definiu a fonte nem mostrou qual é. E a página de saída da console? SetConsoleOutputCP(); É como um videogame. Tem várias fases.
-
Você não postou nenhum código então não sei o que dizer Isso é o que deve aparecer no final da tabela Em verde sobre preto como nos velhos tempos. Como eu te disse não basta mudar a página de código. Depende daquelas coisas que eu listei. E você deve restaurar depois. Coloquei esse loop no meio de um programa grande por isso não postei agora o código. Teste aí e se se não rodar mesmo me fale e mais tarde eu extraio só a parte que imprime a tabela e posto um programa funcional for (int i = 128; i < 255; i += 8) { printf("\n[%3d]\t", i); for (int j = 0; j < 8; j += 1) { printf("%4c", i+j); }; }; printf("\n"); Como eu sempre repito isso é um inferno e não vale a pena. Mas pode ser divertido então vale a pena Depende da fonte em uso na console ou no Terminal, da página de código da console e da página de código de saída da console, e sei lá o que mais adicionado 18 minutos depois Como nos velhos tempos, se estiver em uso a página 437 pode usar no teclado alt e o código e deverá ver as letras Use o Terminal. É muito melhor e o recomendado. 248 é o sinal de grau. Mas... o meu prompt na console sempre foi sinal de integral, que usa duas linhas. No entanto nos tempos modernos o comando prompt não mostra isso, mesmo com a fonte Courier New que o mapa diz que devia imprimir: Como vê os sinais estão aí. Mas precisa de alguma leitura a mais pra entender, porque esses são os símbolos que aparecem no meu computador agora no meu computador: Um inferno
-
Eu deixei um comentário lá mas era meio resumido Entenda que o que faltava fazer ali era converter a resposta para maiúscula ou minúscula antes de comparar com a que estava na questão. Tem um milhão de maneiras de fazer isso, já que o programa é nosso. Podia cadastrar mais de uma resposta, chamar uma função, testar as letras uma a uma, sei lá. No entanto as letras tem um valor, um código. E estão lá uma depois da outra: ('A'+ 1) é 'B', ('A' + 4) é 'D' e assim por diante para as 26 letras. Então se uma letra var é minúscula e eu sei que 'a' é a primeira, então (var - 'a') é a posição dela, sequencial no alfabeto, 'a' vale zero, 'z' vale 26. E assim se eu pegar a posição dela e somar com 'A' eu vou ter a maiúscula correspondente. Você podia ter usado cout e mostrado o valor lá das parcelas e acho que ia entender. É só uma maneira de converter a letra --- somente se for a,b,c ou d --- para a maiúscula antes de comparar com a resposta porque as respostas foram colocadas em maiúscula. Na verdade o certo é colocar as respostas na classe e não ficar convertendo toda hora. Esse programa era só pra você ver umas construções comuns nessa linguagem.
-
você já está em um forum. Rodou o programa em sua máquina? Tem algo específico que não entendeu naquilo? Esse é um forum frequentado por iniciantes então sua eventual dúvida pode ajudar outros, aqui mesmo
-
Sim. Você pode agrupar linhas de código e dar um nome, se chama função ou método. E essas funções podem ter argumentos. Você tem um livro? Recomendo muito ter um livro. Em C++ pode ir um pouco além e usar uma classe. Uma classe pode ter usas funções, esses blocos de código, e suas variáveis. E é uma cosia importante. No seu caso imagine uma classe Pergunta: uma pergunta tem um texto, alternativas e uma resposta. Então você pode automatizar esse de milhões de maneiras. Digitei um exemplo em cima de seu programa pra você ter um exemplo de alguns comandos Rode em seu computador e procure entender as diferenças. #include <iomanip> #include <iostream> using namespace std; class Pergunta { private: char resposta; public: string alt1; string alt2; string alt3; string alt4; string texto; public: Pergunta( string questao, char r, string a1, string a2, string a3, string a4 ) : texto(questao), resposta(r), alt1(a1), alt2(a2), alt3(a3), alt4(a4) {}; int mostra() { // mostra a pergunta, le a opcao e retorna 1 // se o cara acertou char resp_1; cout << endl << texto << endl; cout << endl << "| A) " << setw(16) << alt1 << endl << "| B) " << setw(16) << alt2 << endl << "| C) " << setw(16) << alt3 << endl << "| D) " << setw(16) << alt4 << endl << endl; cout << "Escreva a letra correspondente: "; cin >> resp_1; // se a letra veio minuscula muda para maiuscula // as letras vem em ordem: a..z e A..Z if ((resp_1 >= 'a') && (resp_1 <= 'd')) resp_1 = (resp_1 - 'a') + 'A'; // convertida para maisucula, compara com a resposta if (resp_1 == resposta) { cout << "voce acertou, parabens!" << endl; return 1; }; cout << "voce errou, estude mais um pouco da proxima vez :)" << endl; return 0; }; // mostra() }; // classe Pergunta int main() { Pergunta Q1("Qual a capital do Parana?", 'B', "Joinville", "Curitiba", "Foz do Iguacu", "Brasilia"); Pergunta Q2("Qual o numero PI?", 'A', "3,14", "4,11", "2,14", "1,61"); int pontos = 0; pontos = pontos + Q1.mostra() + Q2.mostra(); cout << endl << "voce terminou com " << pontos << " ponto (s)!" << endl; return 0; }; Aí no main() você vê que um jeito de entrar com a questão pode ser direto na hora de criar. Assim não precisa repetir aquele código de alinhar as opções por exemplo. E se mudar ali muda para todas as questões, que eu acho que é o que você queria saber como. A função mostra() retorna 1 ou 0 então já pode ir somando em pontos Não é um exemplo sério. Apenas para você ver alguns mecanismos Veja o que sai na tela Qual a capital do Parana? | A) Joinville | B) Curitiba | C) Foz do Iguacu | D) Brasilia Escreva a letra correspondente: a voce errou, estude mais um pouco da proxima vez :) Qual o numero PI? | A) 3,14 | B) 4,11 | C) 2,14 | D) 1,61 Escreva a letra correspondente: B voce errou, estude mais um pouco da proxima vez :) voce terminou com 0 ponto (s)!
-
Deixe a chamada a printf() fora do loop...
-
C BÁSICO EM C Usando STRING em Switch/case e uso da função
arfneto respondeu ao tópico de Vulgo_Lobo em C/C#/C++
Eu copiei o código de seu programa, claro, e esqueci de trocar "sábado" por "sábado" adicionado 1 minuto depois Isso quer dizer que switch é um comando, e case é um tipo especial de label. E switch/case não é nada. -
C BÁSICO EM C Usando STRING em Switch/case e uso da função
arfneto respondeu ao tópico de Vulgo_Lobo em C/C#/C++
Pois é: você deve retornar o resultado a ser impresso O enunciado não está assim uma beleza. mas o resultado é "domingo" para 1, "segunda" para 2 e assim por diante. É isso que você deve retornar. No entanto declarou char verif(int n); que retorna só uma letrinha. Pode retornar um ponteiro para char simplesmente. Porque só o sábado começa com minúscula? case 7:strcpy( y, "sábado"); break; Evite usar acentos se não for obrigado. Eles não saem em todas as máquinas a menos que você faça uma série de coisas, no mínimo usando setlocale() para definir a região e mudando a página de código da console para alguma que tenha os acentos da língua portuguesa. E educadamente restaurando como estava ao final do seu programa. Muito esforço para um simples exercício de switch. O comando se chama switch, apenas switch. Não sei de onde vem essa gíria de switch/case, mas não está nos livros. Ao menos não em algum que eu já tenha lido. Uma parte do padrão Onde se vê o comando switch() e a notação de label para o case. Porque a cláusula case é um prefixo para um label, como você poderia escrever em seu programa reinicia: // código ... ... if(condicao) goto reinicia; ... De volta ao seu programa: Note que você chama duas vezes a função por engano. E a mensagem está errada: não é a "semana" mas sim o correspondente dia da semana em relação ao número digitado. Talvez deva mudar a redação... Deixe um espaço ao menos entre o prompt e a leitura... Fica mais fácil de ler a mensagem sem o cursor em cima da letra Compare: Ou E veja que é muito mais fácil de ler o que você digitou no segundo caso. main() deve ser a primeira função de seu programa. Isso vai ajudar você e outros que forem ler seus programas. E é prática recomendada --- ou obrigada --- em muitos empregos e escolas. Veja um exemplo abaixo, possivelmente bem mais simples, de como escrever esse exercício sem chamar outras funções ou duplicar código #include <stdio.h> char* verif(int); main(void) { int n; printf("\nDe 1 a 7, digite o dia da semana que voce deseja ver: "); int res = scanf("%d", &n); if (res != 1) return -1; printf("Dia da semana: %s\n", verif(n)); return 0; }; // main() char* verif(int n) { static char os_dias[7][8] = { "Domingo", "Segunda", "Terca", "Quarta", "Quinta", "Sexta", "sábado" }; switch (n) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: return (char*) os_dias[n-1]; }; // switch() return 0; }; // verif() -
C O código funciona mais deixa 0.01 no float sempre
arfneto respondeu ao tópico de Arthur_Azvd em C/C#/C++
Use centavos como unidade e não como 0.01 e calcule tudo usando int. Usar float e double sempre inclui um risco de erro de arredondamento e sobra algo. E quando compara muitas vezes não dá igual porque na representação interna de dois float eles podem diferir por algum valor lá na oitava casa decimal por exemplo, devido à representação não ser exata. Por isso COBOL foi a linguagem do dinheiro por décadas: contas sem erro de arredondamento. -
Não, não tem que ter o mesmo nome. O único vínculo é o nome entre "<>" ou entre aspas no include. Mas pode ser algo assim que está errado. No entanto não é um erro de compilação. Compilou ok mas o linker não achou o código. Provavelmente o projeto não está montado direito e o link --- ld --- não recebeu a referência ao objeto que contem as rotinas. Não é uma boa ideia deixar fontes em outro lugar. Se não quer que o post fique grande, apenas use o botão do spoiler e deixe os 3 programas dentro. Assim eu não tenho que seguir um link, ir a outro site, baixar algo, eventualmente descomprimir e finalmente tr acesso a um código para ajudar alguém. Se deixar aqui é mais cômodo. Mas se vai deixar em outro lugar apenas deixe no github. É o mais fácil pra você e pra todo mundo. É só um click no seu ambiente e aí quem quiser ajudar pode importar o projeto com um click só no Visual Studio ou no VS Code usando clone Parece que você está usando os fontes na pasta temporária. Não é uma boa ideia em geral. Se por engano alguém rodar por exemplo a limpeza do disco ou algo sair errado com sua conta no sistema você vai perder tudo. %TEMP% tem esse nome por uma razão.
-
Eu li o programa. Entendo o que é. Mas não é o clássico programa de estudante de estruturas de dados para o jogo da velha. Nesse caso é apenas a interface para controlar o jogo entre dois usuários. No mesmo micro, o que é esquisito. De todo modo considere o que eu sugeri. Só uns palpites.
-
Muito melhor assim Mas não respondeu ao que eu perguntei: que d1@b0 é jogo? Não vejo a declaração... O programa não está ok. Mas não muito bom de ler, rodar ou jogar. Do ponto de vista da interface, é muito chato digitar linha e coluna se só tem 9 casinhas na tela. Podia por exemplo mostrar apenas algo como | X | O | X | | 4 | 5 | 6 | | 7 | O | 9 | E o cara digita o número da célula que quer. Linha e Coluna é exagero. O programa está difícil de ler com aquela matriz de duas dimensões e aqueles IF gigantes. Se só são dois jogadores porque não usar uma matriz para cada um? Fica mais fácil de identificar vitoria e pode ficar mais fácil de ler o programa... E quando um ganha o outro perde afinal. E pouco eficiente: só existem essas 8 combinações decisivas, as 3 linhas e as 3 colunas e as duas diagonais. Então pode usar constantes já na compilação e comparar com valores fixos.
-
Procure postar seu código dentro daquele formulário code usando o botão "<>" na tela, ou partes dele podem se perder e assim fica difícil para alguém importar em seu computador e testar... adicionado 0 minutos depois o que é jogo[ ] ?
-
poste o código como está agora e a gente pode olhar...
-
Acho que não devia "aproveitar" um tópico para propor outro. Use um título significativo e crie um novo tópico. Essa é a ideia do forum: ajudar pessoas com problemas semelhantes. Apesar de ainda poder ser localizado pelos programas de busca não vai ser por quem está apenas vendo os títulos e eventualmente pode te ajudar.
-
Já pensou em mostrar as notas lidas, logo depois que leu? E em mostrar a média calculada logo no retorno de pos()? Assim você vai se certificando do que está fazendo... você retorna um int de pos(), 1, ,2 ou 3. Não deve declarar o retorno como float. declare o simples int pos(float, float, float, float); Que pretende com essa linha: scanf("%f \n\n%f \n\n%f \n\n%f", &n, &m, &p, &q); Pode usar só scanf("%f%f%f%f", &n, &m, &p, &q); Deixe main() sempre como a primeira função de seu programa não a última. Use protótipos para as funções no começo... Assim por exemplo #include <stdio.h> float par(float, float, float, float); int pos(float, float, float, float); main() { float n, m, p, q; int id; printf("Digite as notas: "); scanf("%f \n\n%f \n\n%f \n\n%f", &n, &m, &p, &q); printf("Média das notas: %.2f", par(n, m, p, q)); //comprova de que função media id = pos(n, m, p, q); if (id == 1) printf("\nSituacao: Aprovado"); if (id == 2) printf("\nSituacao: Dependencia"); else printf("\nSituacao: Reprovado"); return 0; } float par(float n, float m, float p, float q) { return ((n + m + p + q) / 4); } int pos(float n, float m, float p, float q) { float x; int id; x = par(n, m, p, q); if (x > 6) id = 1; if (x < 6 && 5 < x) id = 2; else id = 3; return id; } É melhor para você e para quem tentar ler seus programas. Em pos() você pode escrever o mais simples int pos(float n, float m, float p, float q) { float x = par(n, m, p, q); if (x > 6) return 1; if (x < 6 && 5 < x) return 2; return 3; } retornando assim que tiver um resultado, ao invés de int pos(float n, float m, float p, float q) { float x; int id; x = par(n, m, p, q); if (x > 6) id = 1; if (x < 6 && 5 < x) id = 2; else id = 3; return id; } Muito mais difícil de ler adicionado 1 minuto depois E como @Lucca Rodrigues disse, suas condições de teste na função pos() estão assim.. folclóricas. Melhor rever como ele disse
-
É perfeitamente possível fazer do modo como está pensando, mas acho que está superestimando o enunciado. Acho que a ideia aqui é bem mais simples: Pode ir lendo do modo normal, lendo e ecoando as letras uma a uma. E vai guardando as letrinhas. Pode ser um vetor e nem precisa alocar memória nem nada. Quando o cara digitar o tal 'x' você apenas mostra que guardou tudo e põe na tela tudo o que leu desde o início. Só isso. Se quer MESMO ler até o 'x' sem mostrar e está usando Windows tem dois modos mais óbvios: usar PeekConsoleInputBuffer() e ver o que já foi digitado, sem ler. E só ler quando o cara teclar o 'x'. Ou usar SetConsoleMode() e os parâmetros ENABLE_ECHO_INPUT e ENABLE_LINE_INPUT como descrito em https://docs.microsoft.com/en-us/windows/console/console-functions e ler sem mostrar.
-
Porque o Windows 10 complica tanto com a configurações de rede?
arfneto respondeu ao tópico de misterjohn em Redes e Internet
Seu post já vem com uma conclusão então é difícil comentar. A "configuração de rede" usada em geral em redes domésticas caiu para praticamente zero no Windows 10. Não há muito para o usuário comum configurar. E para os casos em que de fato alguma configuração é necessária tudo ficou mais simples com o "novo" Windows que já tem 5 aninhos de idade. De modo geral o que mudou desde os anos '90 é que o protocolo de compartilhamento de antes, um chamada NETBIOS --- e suas tecnologias associadas -- foi de certo modo incluído no protocolo TCP/IP, o que se usa na internet. E tudo ficou mais simples e não mais complicado. As permissões de acesso a pastas não mudaram. Existe o grupo de trabalho e a conta e a senha. E isso é o que controla o acesso a recursos compartilhados usando alguma das muitas maneiras de compartilhar coisas no Windows, como Com o estabelecimento do Office 365 e do OneDrive --- sucessor do Live Mesh --- apareceu uma outra camada em que se pode compartilhar a pasta através de uma versão online dela, e apareceram novos ícones na tela e tal. Mas ficou de novo mais simples e não mais complicado Esses ícones verdinhos por exemplo indicam que a pasta disponível aqui também tem uma versão online acessível, e ela está atualizada. De volta ao seu caso Agora tem uma coisa que vai e volta que é o conceito de "grupo doméstico". Fuja disso. Outra é um assistente para detecção de problemas de rede: fuja disso também. Apenas faça o simples. Essa é a maneira mais simples de controlar o compartilhamento. Só preencher esse formulário. E mantenha ao menos uma conta em comum entre TODOS seus computadores com a mesma senha. Isso torna sua vida mais simples. Note que há uma conta "Todos" ou "EVERYONE" em toda máquina e pode tentar isso também. Não existe essa noção de único usuário. O compartilhamento não requer sessão aberta. Mas para se autenticar na máquina onde quer acessar algo precisa de algum tipo de credencial, usuário e senha, e isso é bom e não ruim. adicionado 7 minutos depois No fundo até existe uma configuração de rede e um lance de perfis de rede e tal, mas não há razão para mexer nisso. Quando há razão ela aparece em casos em que a razão vem junto com alguém que criou a necessidade e conhece a maneira. Para uma rede doméstica não há razão para mudar nada. É como as configurações avançadas das placas de rede: muita gente vai lá e muda coisas seguindo sugestões de terceiros ou palpites para resolver problemas. É um convite para o desastre. Uma vez que mudou algo importante está por sua conta, e como não sabia o que era... adicionado 11 minutos depois Isso não existe mais. No fundo desde o Windows 98. -
Não pode ser uma coisa simples como #include <stdio.h> int main(void) { char CPF[16]; fgets(CPF, 16, stdin); CPF[3] = CPF[7] = CPF[11] = CPF[14] = 10; CPF[15] = 0; fputs(CPF, stdout); return 0; }; Não tem processamento nenhum afinal
-
C Matriz10x10 solicitar dados do usuario e armazenar e m e n
arfneto respondeu ao tópico de Vilanovacar em C/C#/C++
Não é uma boa ideia usar #define com nomes pequenos assim. Não por acaso você vai reparar que em geral nas constantes em C eles tem nomes enormes, sempre tudo em maiúsculas e cheios de _ e tal.... Exemplo: veja um pedaço de limits.h #define MB_LEN_MAX 5 #define SHRT_MIN (-32768) #define SHRT_MAX 32767 #define USHRT_MAX 0xffff #define INT_MIN (-2147483647 - 1) #define INT_MAX 2147483647 #define UINT_MAX 0xffffffff #define LONG_MIN (-2147483647L - 1) #define LONG_MAX 2147483647L #define ULONG_MAX 0xffffffffUL #define LLONG_MAX 9223372036854775807i64 #define LLONG_MIN (-9223372036854775807i64 - 1) #define ULLONG_MAX 0xffffffffffffffffui64 #define _I8_MIN (-127i8 - 1) #define _I8_MAX 127i8 #define _UI8_MAX 0xffui8 #define _I16_MIN (-32767i16 - 1) #define _I16_MAX 32767i16 #define _UI16_MAX 0xffffui16 #define _I32_MIN (-2147483647i32 - 1) #define _I32_MAX 2147483647i32 #define _UI32_MAX 0xffffffffui32 #define _I64_MIN (-9223372036854775807i64 - 1) #define _I64_MAX 9223372036854775807i64 #define _UI64_MAX 0xffffffffffffffffui64 Esse é um header onde tem apenas #define com limites, como o maior inteiro por exemplo, INT_MAX. É sempre bom imitar os caras que escrevem isso, porque eles são os melhores. E porque eles escrevem assim? Tudo em maiúsculas, cheio de underline e tal? Para minimizar a chance de bater de frente com uma variável num programa que use esse #define e tenha uma variável com o mesmo nome. E você acha que eles tem razão? Eles tem. Veja o que você fez: No mesmo programa criou um #define n para 4 e linhas abaixo declarou uma variável n que vai ser substituída por 5 graças ao seu #define. Sério? Não use um #define assim. Use valores enormes, dois _ sei lá. Mas 'n'? durou 4 linhas. Não faça isso. No geral, até evite #define em projetos pequenos Em relação esse problema, foi muito discutido aqui nesses dias. Veja por exemplo em -
C++ Selecionar apenas palavras especificas no código
arfneto respondeu ao tópico de Ana Maria Garcia em C/C#/C++
Apenas mude aquele (único) loop e vai continuar funcionando. Escreva seu programa em torno DOS DADOS. Escreva uma classe Hit. Está usando C++ e é muito mais fácil escrever essas coisas nessa linguagem do que em C ou Pascal por exemplo. E entenda que o programa que te mostrei funciona na linha de comando então você pode testar com vários arquivos sem ter que compilar ou gerar o programa de novo: basta mudar o nome dos arquivos Como a entrada é texto, você pode editar o próprio arquivo de teste no IDE ou no bloco de notas e gerar outros arquivos de teste sem mexer no programa Por falar nisso, quando você posta algo assim poste algumas linhas do arquivo EM FORMATO TEXTO assim se alguém quiser testar em um programa pode recortar direto da tela... Seu projeto devia usar csv. É mais prático e facilitaria importar e editar os dados em planilhas como o Google Planilhas ou o Excel. Não há razão pra usar texto e não usar csv. Você pode criar uma função que recebe o valor do registro sentinela e devolve o próximo conjunto de dados, assim é só trocar no loop e pronto. Dentro dela você coloca o seu código que já lê o registro e devolve 1 se tem um próximo registro e 0 se encontrou o tal registro sentinela. Nada mais. Exemplo int proximo(Hit* registro, string sentinela); E se o final for o último campo valer pmtTarget_U14_phys você muda uma única linha no loop proximo(leitura,"pmtTarget_U14_phys"); E o programa já roda com o loop assim while (proximo(&leitura, "pmtTarget_U14_phys")) { // processa o registro saida << conteudo << endl; }; // while() C++ class Hit { int hit; double sensor[5]; string target; }; Entenda que o normal é criar uma classe Leitura e colocar esse comportamento DENTRO da classe. Talvez você pudesse explicar a lógica do processamento... Essa acima de pouco serve já que não tem nada dentro exceto so dados.
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais