Вы находитесь на странице: 1из 32

LINGUAGEM C E/S: SCANF

PROF. EMANUEL ESTRADA <EMANUELESTRADA@FURG.BR>

Sistemas de Informao Centro de Cincias Computacionais (C3) Universidade Federal do Rio Grande (Furg)

INTRODUO
O comando de entrada utilizado para receber dados digitados pelo usurio, que sero armazenados em variveis Na linguagem ANSI C, o comando utilizado para entrada o scanf O scanf est definido na biblioteca stdio.h

PROTTIPO

scanf(expresso de controle, argumentos);

Exemplo: scanf(%d,&variavel);

EXPRESSO DE CONTROLE
scanf(expresso de controle, argumentos); Na expresso de controle so especificados os tipos das variveis que sero lidas A quantidade de especificadores deve ser a mesma da de argumentos H a possibilidade de ler conjuntos de caracteres (scanset)

EXPRESSO DE CONTROLE
scanf(expresso de controle, argumentos); Especificadores de tipo:
Cdigo %c %d %i %hi %li %e %f %lf %h %o %s %x %p %[] Descrio Um nico caracter (char) Um nmero decimal (int) Um nmero inteiro Um short int Um long int Um ponto flutuante Um ponto flutuante Um double Inteiro curto Nmero octal String Nmero hexadecimal Ponteiro Busca por um conj. de caracteres

ARGUMENTOS
scanf(expresso de controle, argumentos); Em argumentos so informados os endereos das variveis que recebero valores informados pelo usurio Cada argumento necessita ser precedido pelo operador &, quando no for do tipo ponteiro Exemplo: scanf(%d %f, &var_int, &var_float);

ARGUMENTOS
P: Porque utilizar o operador &? R: Uma varivel informa valores. Quando utilizamos o comando printf a varivel no precisa do operador & porque precisamos do valor dela. Porm, valores no informam onde a varivel se encontrar na memria, ou seja, no diz onde guardar o valor lido do teclado. Logo, o operador & permite obter o endereo de memria da varivel. Em outra palavras, permite saber o espao onde o valor lido ser armazenado. P: Precisa-se sempre utilizar o operador &? R: No. H casos em que a varivel do tipo ponteiro, i.e., uma varivel cujo valor um endereo.

SCANF: INTEIROS
Ex. 1: Lendo um inteiro.
#include <stdio.h> int main() { int var_int; printf("Digite uma variavel inteira: "); scanf("%d", &var_int); printf("Voce digitou %d \n", var_int); return 0; }

SCANF: INTEIROS
Ex. 2: Lendo dois inteiros.
#include <stdio.h> int main() { int var_int1, var_int2; printf("Digite a 1a variavel inteira: "); scanf("%d", &var_int1); printf("Digite a 2a variavel inteira: "); scanf("%d", &var_int2); printf("Voce digitou %d e %d\n", var_int1, var_int2); return 0; }

SCANF: INTEIROS
Ex. 3: Lendo dois inteiros no mesmo comando.
#include <stdio.h> int main() { int var_int1, var_int2; printf("Digite a as duas variaveis inteiras: "); scanf("%d %d", &var_int1, &var_int2); printf("Voce digitou %d e %d\n", var_int1, var_int2); return 0; }

SCANF: INTEIROS
Ex. 4: Lendo um inteiro curto.
#include <stdio.h> int main() { short int var_int; printf("Digite uma variavel inteira: "); scanf("%hd", &var_int); printf("Voce digitou %hd \n", var_int); return 0; }

SCANF: INTEIROS
Ex. 5: Lendo um inteiro longo.
#include <stdio.h> int main() { long int var_int; printf("Digite uma variavel inteira: "); scanf(%ld", &var_int); printf("Voce digitou %d \n", var_int); return 0; }

SCANF: PONTO FLUTUANTE


Ex. 1: Lendo um float.
#include <stdio.h> int main() { float var_float; printf("Digite uma variavel ponto flutuante: "); scanf(%f", &var_float); printf("Voce digitou %f \n", var_float); return 0; }

SCANF: PONTO FLUTUANTE


Ex. 2: Lendo dois float.
#include <stdio.h> int main() { float var_float1, var_float2; printf("Digite duas variaveis ponto flutuante: "); scanf(%f %f", &var_float1, &var_float2); printf("Voce digitou %f e %f \n", var_float1, var_float2); return 0; }

SCANF: INT E FLOAT


Ex. 1: Lendo um int e um float.
#include <stdio.h> int main() { int var_int; float var_float; printf("Digite uma variavel int e uma float: "); scanf(%d %f", &var_int, &var_float); printf("Voce digitou %d e %f \n", var_int, var_float); return 0; }

SCANF: CARACTERES
Ex. 1: Lendo um caractere.
#include <stdio.h> int main() { char var_char; printf("Digite uma variavel char : "); scanf(%c", &var_char); printf("Voce digitou %c \n", var_char); return 0; }

SCANF: CARACTERES
Ex. 2: Lendo dois caracteres no mesmo comando.
#include <stdio.h> int main() { char var_char1, var_char2; printf("Digite duas variaveis char : "); scanf("%c %c", &var_char1, &var_char2); printf("Voce digitou %c e %c \n", var_char1, var_char2); return 0; }

SCANF: CARACTERES
Ex. 3: Lendo dois caracteres em sequncia.
#include <stdio.h> int main() { char var_char1, var_char2; printf("Digite a 1a variavel char : "); scanf("%c", &var_char1); printf("Digite a 2a variavel char : "); scanf("%c", &var_char2); printf("Voce digitou %c e %c \n", var_char1, var_char2); return 0; }

SCANF: CARACTERES
Ex. 3: Lendo dois caracteres em sequncia.

RESULTADO INESPERADO
#include <stdio.h> int main() { char var_char1, var_char2; printf("Digite a 1a variavel char : "); scanf("%c", &var_char1); printf("Digite a 2a variavel char : "); scanf("%c", &var_char2); printf("Voce digitou %c e %c \n", var_char1, var_char2); return 0; }

SCANF: CARACTERES
Ex. 3: Lendo dois caracteres em sequncia.

SOLUO:
#include <stdio.h> int main() { char var_char1, var_char2; printf("Digite a 1a variavel char : "); scanf("%c", &var_char1); scanf("%*[^\n]");/*limpa canal de entrada*/ scanf("%*c"); /*limpa canal de entrada*/ printf("Digite a 2a variavel char : "); scanf("%c", &var_char2); printf("Voce digitou %c e %c \n", var_char1, var_char2); return 0; }

SCANF: STRING
Ex. 1: Lendo uma string composta.
#include <stdio.h> int main() { char var_str[30]; printf("Digite uma variavel string : "); scanf("%[^\n]", var_str); printf("Voce digitou %s \n", var_str); return 0; }

FGETS
Alternativa, recomendada, ao scanf para leitura de strings Prottipo: fgets(string, tam_string, stdin); Exemplo:
#include <stdio.h> int main() { char var_str[30]; printf("Digite uma variavel string : "); fgets(var_str, 30, stdin); printf("Voce digitou %s \n", var_str); return 0; }

EXEMPLOS

Somando dois nmero inteiros:

EXEMPLOS

Trocando o contedo de duas variveis:

EXEMPLOS

Calculando os permetro de um tringulo:

EXEMPLOS

Calculando os permetro de um tringulo:

EXEMPLOS

Calculando a rea do crculo e comprimento da circunferncia:

EXEMPLOS
#include <stdio.h>

Leitura de dados cadastrais:

int main() { char nome[50]; /*apenas letras*/ char cpf[20];/*numero e caracteres especiais*/ unsigned short int idade;/*em anos terrestres*/ unsigned short int carga;/*carga horaria semanal*/ /*leitura das variaveis*/ printf("Digite o nome: "); fgets(nome, 50, stdin); printf("Digite o CPF: "); fgets(cpf, 20, stdin); printf("Digite a idade: "); scanf("%hd",&idade); printf("Digite a carga horia semanal: "); scanf("%hd",&carga); /*apresentando o resultado*/ printf("NOME: %s", nome); printf("CPF: %s", cpf); printf("IDADE: %hd\n",idade); printf("Carga Semanal Horaria: %hd.\n",carga); }

SCANF: ALTERANDO ENTRADA


Se necessrio usar sempre o mesmo conjunto de valores para teste de um programa, pode-se utilizar um arquivo em vez do teclado como canal de entrada Para tal, necessrio os seguintes passos: 1. Criar um arquivo de texto contendo os valores que seriam digitados; 2. No terminal, quando o programa for executado, informar que o arquivo criado ser direcionado entrada atravs do operador <

SCANF: ALTERANDO ENTRADA


Joao Silva 000.000.000-00 56 20
Arq. de entrada: entrada.txt

Exemplo:

Cdigo-fonte: dados.c

$./dados < entrada.txt <enter>

EXERCCIOS

1. Faa um programa que receba trs notas e seus respectivos pesos, calcule e mostre a mdia ponderada dessas notas. 2. Faa um programa que receba o salrio de um funcionrio e o percentual de aumento, calcule e mostre o valor do aumento e o novo salrio. 3. Faa um programa que receba o ano de nascimento de uma pessoa e o ano atual, calcule e mostre : a) A idade dessa pessoal; b) Quantos anos ela ter em 2050 4. Sabe-se que o quilowatt de energia custa um quinto do salrio mnimo. Faa um programa que receba o valor do salrio mnimo e a quantidade de quilowatts consumida por uma residncia, calcule e mostre: a) O valor de cada quilowatt; b) O valor a ser pago por essa residncia c) O valor a ser pago com 15% de desconto.

REFERNCIAS
ASCENCIO, Ana F. G.; CAMPOS, Edilene A. V. Fundamentos da programa de computadores. 2. ed. So Paulo: Pearson Prentice Hall, 2007. Curso de linguagem C - UFMG. Disponvel em: http:// www.ead.cpdee.ufmg.br/cursos/C/. Acesso em: 24 de abril de 2010.

Вам также может понравиться