Programar em C/Entrada e saída simples: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Edudobay (discussão | contribs)
links -> novo formato
Linha 240:
scanf ("string de formatação", &arg1, &arg2, ...);
 
Como você pode ver, a sintaxe é quase igual à de printf(), com exceção do E comercial (&). Você entenderá melhor o seu uso nas seções seguintes, mas adiantamos que ele é um operador que retorna o endereço de uma variável. Isso é necessário pois a função scanf() deve modificar as variáveis, e quando não usamos o operador de endereço, passamos apenas o valor de uma variável para a função. Isso será explicado melhor no capítulo sobre [[Programar em C: ../Ponteiros|ponteiros]].
 
Um exemplo básico da utilização de scanf() é este:
Linha 304:
Este exemplo lê dois números inteiros e os guarda nas variáveis <var>a</var> e <var>b</var>. O número de conversões realizadas é guardado na variável <var>num</var>.
 
<div style="background-color: #ddffdd; padding: 10px; margin: 20px;">Note que aqui introduzimos um conceito novo: o '''valor de retorno''' de uma função. Ele pode ser obtido simplesmente associando o valor de uma variável à chamada da função. Ele será detalhado na seção [[Programar em C: ../Funções|Funções]], mas já é possível compreender um pouco sua utilização.</div>
 
== <tt>gets()</tt> e <tt>getchar()</tt> ==
Linha 330:
}
 
A notação <tt>char buffer[10]</tt>, que ainda não foi introduzida (e será detalhada na seção [[Programar em C: ../Vetores|Vetores (arrays)]]), pede que seja reservado um espaço para 10 caracteres para a string <var>buffer</var>. Portanto, se usuário digitar mais de 9 caracteres (pois o terminador de string é adicionado ao que o usuário digitou), os caracteres excedentes adicionais serão colocados na área de memória subsequente à ocupada pela variável, escrevendo uma região de memória que não está reservada à string. Este efeito é conhecido como "estouro de buffer" e pode causar problemas imprevisíveis. Por isso, não se deve usar a função gets(); mais tarde introduziremos a função fgets(), que não apresenta esse problema e que deve ser usada no lugar de gets().
 
== <tt>sprintf()</tt> e <tt>sscanf()</tt> ==