Mr.Henrique Posted March 15, 2014 Report Share Posted March 15, 2014 (edited) galera sou novo na area de programação e criei esse programa simples só que eu quero dar uma perfumada nele(Colocar os acentos) só que ão estou conseguindo colocar os acentos e nem o Ç. #include<stdio.h> main(){ float pp,v,d,total; printf("***************************\n* Calculadora de passagem *\n***************************"); printf("\nInforme o numero de viagens \n"); scanf("%f",&pp); printf("Informe o preço da passagem\n"); scanf("%f",&v); printf("Informe se a passagem teve desconto\n"); scanf("%f",&d); total=pp*(v-v*d/100); printf("você gastou \nR$ %2.f \n\n",total); return main (); } espero que vocês me ajudam. e mais uma pergunta não tem nenhuma biblioteca que coloca os acentos automáticos ? Edited March 15, 2014 by thoga31 Tags code + GeSHi Link to comment Share on other sites More sharing options...
thoga31 Posted March 15, 2014 Report Share Posted March 15, 2014 Deves estar a programar em Windows. A linha de comandos do Windows usa uma configuração de caracteres arcaica onde tudo o que é acentos e cedilhas devem ser colocados à mão, ou seja, indicando directamente o caracter da tabela ASCII. Mas antes disso, que não é o mais prioritário, tens de dar umas correcções no teu programa: main(){ Não se declara correctamente o main desta forma. Apesar de o compilador aceitar, deve-se sempre usar uma de duas formas, sendo esta a mais compacta e essencial: int main(void) { return main (); O que é isto? Retornar o main? Tendo em conta que o main deve ser do tipo int, este deverá ser o seu retorno: return 0; Knowledge is free! Link to comment Share on other sites More sharing options...
Mr.Henrique Posted March 15, 2014 Author Report Share Posted March 15, 2014 só que seu eu coloco o return 0; ele não volta o programa novamente você saberia me explicar pq ele não volta e eu colocando return main (); ele volta Meu copilador é o DEV C++ Outra duvida que eu tenho pq o modo mais correto é esse int main(void) { que tipo de problema ele pode me dar mais pra frente em algum programa ? Link to comment Share on other sites More sharing options...
thoga31 Posted March 15, 2014 Report Share Posted March 15, 2014 (edited) O Sistema Operativo (OS) recebe um valor dos programas quando eles acabam a sua execução. Os sistemas Unix devem ser dos que mais usam estes dados. Este valor indica se o programa terminou com sucesso ou não. Quando o sistema recebe 0, então tudo correu bem. Um outro valor indica erro, e para cada valor existe um erro associado. Desta forma, é uma boa prática usar int main(void) por dois motivos: int enquanto tipo de retorno do main uma vez que temos de devolver um valor ao OS, e void pois é aconselhável indicar explicitamente que não há nenhum argumento. Se o void existe é por algum motivo, e é para ser usado. Quanto ao return 0, já expliquei: é o valor de retorno para o OS a indicar sucesso. Mas agora temos o teu caso em que queres que o programa reinicie. Primeiro, podes chamar o main sem nenhum return - o return obriga à devolução de um valor, e, no teu código, de cada vez que o programa recomeça, há um acumular de valores de retorno para o OS em que apenas o último de todos é enviado. Brilhantemente, neste caso, o valor é nada uma vez que main() equivale a void main(void) - não é uma boa prática enviar nada ao OS. Mais, tu tens um problema: tens um programa que nunca termina a não ser que feches a janela. Isto não se faz. O programa deve ter obrigatoriamente uma forma de acabar por si mesmo. Portanto, se queres que o utilizador volte a inserir dados, usas uma estrutura de reptição, aka ciclo. Por exemplo: int main(void) { short opcao = 1; do { // o teu código... printf("Recomecar? (0=nao, 1=sim) "); scanf("%h", &opcao); } while (opcao != 0); return 0; } Edited March 15, 2014 by thoga31 Knowledge is free! Link to comment Share on other sites More sharing options...
Mr.Henrique Posted March 15, 2014 Author Report Share Posted March 15, 2014 hmm tendi o que você quer dizer ... mais não entendi o codigo tipo primeira linha printf("Recomecar? (0=não, 1=sim)"); esse comando dessa linha vai mostrar para o usuario e vai pedir para o usuario escolher uma das opções 2° Linha scanf ("%h"), &opcao); aqui eu não sei o que seguinifica o %h .... depois &opcao quer dizer o endereço correto ? 3° linha eu não entendi o que ela faz e tambem quero saber aonde esta o comando do 1= sim ? e tambem aonde eu coloco o codigo no final, meio o no inicio ? sou meio novo no assunto então quero tirar todas as duvidas e explorar bem o codigo para aprender o mais rapido possivel kkkkk Link to comment Share on other sites More sharing options...
thoga31 Posted March 15, 2014 Report Share Posted March 15, 2014 (edited) primeira linha printf("Recomecar? (0=não, 1=sim)"); esse comando dessa linha vai mostrar para o usuario e vai pedir para o usuario escolher uma das opções Sim, vai mostrar no ecrã a mensagem "Recomecar? (0=nao, 1=sim)". 2° Linha scanf ("%h"), &opcao); aqui eu não sei o que seguinifica o %h .... depois &opcao quer dizer o endereço correto ? Já estudaste bem o scanf? Porque é que tu usaste %f nos teus scanf's? E no teu printf? 😉 O primeiro argumento indica o tipo de dados que vai ser lido - neste caso, %h indica que é uma variável do tipo short. O &opcao é o mesmo que os teus scanf's - o queé passado ao scanf é o endereço da variável. 3° linha eu não entendi o que ela faz Tens de estudar estruturas de controlo: Estruturas de decisãoIf-Else Switch [*]Estruturas de repetição for( ; ; ) while () do do { } while () Procura acerca desse assunto. e tambem quero saber aonde esta o comando do 1= sim ? Eu simplifiquei imenso o exemplo. Se eu quero apenas 0 ou 1, convém controlar isso, mas eu não controlei. O importante ali é a estrutura de repetição do-while para controlar o fluxo do programa para não usar uma chamada do main. e tambem aonde eu coloco o codigo no final, meio o no inicio ? Está ali um comentário a dizer "o teu código". É aí que se coloca. Tens é de perceber porquê, e para isso tens de estudar as estruturas de controlo. sou meio novo no assunto então quero tirar todas as duvidas e explorar bem o codigo para aprender o mais rapido possivel kkkkk Como és novo, segue este meu conselho religiosamente: mais vale devagar e bem do que depressa e mal. Já conheci vários iniciados que começaram a aprender depressa e achavam-se génios da programação, mas os códigos deles eram de bradar aos céus de tão horríveis que eram. Prefere sempre aprender bem do que aprender depressa, ok? 😉 Edited March 15, 2014 by thoga31 Knowledge is free! Link to comment Share on other sites More sharing options...
Mr.Henrique Posted March 15, 2014 Author Report Share Posted March 15, 2014 sim vlw stack muito obrigado e vou estudar XD Link to comment Share on other sites More sharing options...
thoga31 Posted March 15, 2014 Report Share Posted March 15, 2014 sim vlw stack O meu nick não é "Stack Overflow" mas sim "thoga31", da mesma forma que tu és o "Mr.Henrique" e não o "null". 😉 2 Report Knowledge is free! Link to comment Share on other sites More sharing options...
Mr.Henrique Posted March 15, 2014 Author Report Share Posted March 15, 2014 kkkkkkk descupa não tinha percebido kkkkk 😛 Link to comment Share on other sites More sharing options...
Mr.Henrique Posted March 23, 2014 Author Report Share Posted March 23, 2014 (edited) eu não posso fazer isso né ? #include<stdio.h> main(){ float p,rc,d; char rp; printf("preco do produto: "); scanf("%f",&p); prinf("o produto teve desconto?\n "); scanf("%s",&rp); switch ( toupper (s)){ case 'S' : Printf ("informe o valor do desconto: "); scanf("%f",&d); rc=p-p*d/100; printf("Valor a ser pago R$ %f ",rc); case 'n' : printf ("Valor a ser pago R$ %f ",p); } system("pause"); } para eu fazer isso deveria usar o If ? Edited March 23, 2014 by thoga31 GeSHi Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 23, 2014 Report Share Posted March 23, 2014 eu não posso fazer isso né ? o que te referes quando dizes "isso" ? eu vi vários erros no teu código, mas para não por a carroça à frente dos bois, diz então qual é a tua dúvida em concreto. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
thoga31 Posted March 23, 2014 Report Share Posted March 23, 2014 eu não posso fazer isso né ? Também não sei ao que te referes, mas há várias coisas que não podes fazer... Alguns exemplos: char rp; // ... scanf("%s",&rp); // what? switch ( toupper (s)) // Chegou Deus e disse, "crie-se um 's'", e ele apareceu. switch ( toupper (s)){ case 'S' : Printf ("informe o valor do desconto: "); scanf("%f",&d); rc=p-p*d/100; printf("Valor a ser pago R$ %f ",rc); // e como não ficamos por aqui... case 'n' : printf ("Valor a ser pago R$ %f ",p); // ...isto também será executado para o "case 'S'". } main() // O Damas pode apresentar esta forma de declarar o main, mas não é, de longe, a mais correcta. scanf("%f",&p); scanf("%s",&rp); // E o buffer vai acumulando lixo que não é limpo... scanf("%f",&d); Knowledge is free! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now