paulo1205
(usa Ubuntu)
Enviado em 13/05/2018 - 00:53h
caiocamanholopes escreveu:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char dc[1];
Um
array de uma posição é um desperdício. Não acha que seria melhor ter uma única variável do tipo
char?
Quando você faz isso, está gravando dois
bytes (um para o caráter
s e um
byte nulo, que marca o final da
string) num
array que só tem espaço para um. Isso é um erro grave, cujo impacto sobre a execução do programa é imprevisível.
while (strcmp(dc,"s")==0 || strcmp(dc,"S")==0)
Aqui, de modo semelhante, a função
strcmp() acaba acedendo ao segundo elemento do
array (ao tentar localizar o fim da
string), o que continua sendo inválido.
{
printf("Qualquer coisa\n\n\n");
printf("Para continuar digitar S ou N:\t");
fflush(stdin);
O padrão da biblioteca do C define o funcionamento de
fflush() apenas para
streams de saída de dados. Como
stdin é um
stream de entrada de dados, seu programa pode simplesmente não funcionar ao ser levado para uma máquina diferente da sua.
Sendo
dc um
array (não deveria ser mas, como você o fez assim, respondo de acordo com o código), você não deve usar o operador de obtenção de endereço, pois
arrays em C decaem automaticamente para ponteiros para o primeiro elemento quando usados em expressões que não envolvam os operadores de obtenção de endereço (
&) e de cálculo de tamanho (
sizeof).
Adicionalmente, uma forma de eliminar aquele
fflush(stdin) seria simplesmente colocar um espaço na
string de formatação, antes da especificação de conversão “
%c”.