Ir para o conteúdo

Pesquisar na Comunidade

A mostrar resultados para tags ''c''.



Mais opções de pesquisa

  • Pesquisa por Tags

    Introduza as tags separadas por vírgulas.
  • Pesquisar por Autor

Tipo de Conteúdo


Fórum

  • Bem-vindos ao Portugal-a-Programar
    • Sugestões, Críticas ou Dúvidas relativas ao P@P
    • Acerca do P@P
  • Comunidade a Trabalhar
    • Wiki P@P
    • Apresentação de Projectos de Programação
    • Downloads
  • Revista PROGRAMAR
    • Revista PROGRAMAR
  • Desenvolvimento Geral
    • C
    • C++
    • Java
    • Haskell
    • Pascal
    • Python
    • Bases de Dados
    • Visual Basic Clássico
    • Visual Basic for Applications (VBA)
    • Dispositivos Móveis
    • Outras Linguagens
  • Desenvolvimento Orientado para Web
    • PHP
    • HTML
    • CSS
    • Javascript
    • Outras Linguagens de WebDevelopment
    • Desenvolvimento Web
  • Desenvolvimento .NET
    • C#
    • Visual Basic .NET
    • ASP.NET
    • WPF & SilverLight
  • Software e Sistemas Operativos
    • Software de Produtividade
    • Sistemas Operativos
    • SharePoint
    • Apresentação de Software
  • Informática Extra-Programação
    • Interfaces Visuais
    • Computação Gráfica
    • Algoritmia e Lógica
    • Segurança e Redes
    • Hardware
    • Electrónica
    • Automação Industrial
    • Dúvidas e Discussão de Programação
    • Notícias de Tecnologia
  • Outras Áreas
    • Matemática
    • Dúvidas Gerais
    • Discussão Geral
    • Eventos
    • Anúncios de Emprego
    • Tutoriais
    • Snippets / Armazém de Código
  • Arquivo Morto
    • Projectos Descontinuados
    • System Empires

Blogs

  • Blog dos Moderadores
  • Eventos
  • Notícias de Tecnologia
  • Blog do Staff
  • Revista PROGRAMAR
  • Projectos
  • Wiki

Categorias

  • Revista PROGRAMAR
  • Tutoriais
  • Textos Académicos
  • Exercícios Académicos
    • Exercícios c/ Solução
    • Exercícios s/ Solução
  • Bibliotecas e Aplicações
  • Outros

Procurar resultados em...

Pesquisar conteúdos que contêm...


Data de Publicação

  • Início

    Fim


Última Actualização

  • Início

    Fim


Filtrar por número de...

4948 resultados

  1. thallisandre

    erro expected identifier '('

    Galera, me ajudem achar o erro por favor // Autor:..... #include <stdio.h> #include <locale.h> #include <math.h> int main (){ setlocale (LC_ALL, "Portuguese"); //Declarçao de variaveis float ladoA, ladoB, ladoC, combustivel, preco, ano, multa; int a, b, c, idade ; int opcao; char //Inicio do{ printf("<1> Triangulo"); printf("<2> Preço do combustivel \n"); printf("<3> Ordem crescente \n"); printf("<4> Multa de transito"); printf("<5> Eleitor"); printf("<6> Fim \n"); printf("\n Opção --> "); scanf("%d", &opcao); switch(opcao){ case 1 : //Exercicio 3 printf("\n\n Digite o lado A: \n\n"); scanf ("%f", &ladoA); printf("\n\n Digite o lado B: \n\n"); scanf ("%f", &ladoB); printf("\n\n Digite o lado C: \n\n");printf("\n\n Digite o lado A: \n\n"); scanf ("%f", &ladoA); printf("\n\n Digite o lado B: \n\n"); scanf ("%f", &ladoB); printf("\n\n Digite o lado C: \n\n"); scanf ("%f", &ladoC); if((ladoA<ladoB+ladoC) && (ladoB<ladoA+ladoC) && (ladoC<ladoA+ladoB)){ printf("\n\n E um triangulo \n\n"); else if((ladoA==ladoB) && (ladoA==ladoC) && (ladoB==ladoC)){ printf("\n\n E um triangulo equilatero \n\n"); } else if(( (ladoA == ladoB) && ladoA != ladoC ) ||( (ladoA == ladoC) && ladoA != ladoB) ||( (ladoB == ladoC) && ladoB != ladoA)){ printf("\n\n E um triangulo isoceles \n\n"); } else if((ladoA!=ladoB) && (ladoA!=ladoC) && (ladoB!=ladoC)){ printf("\n\n E um triangulo escaleno \n\n"); } } else { printf("\n\n NAO e um triangulo \n\n"); } break; case 2: //Exercicio 10 printf("\n\n Digite a quantidade de combustivel comprada pela empresa em litros: \n\n"); scanf ("%f", &combustivel); if(combustivel <= 50000){ printf("\n\n Digite os anos passados desde o valor inicial: \n"); scanf("%f", &ano); preco = 2.13 * pow(1.2,ano); printf("\n\n O preço do combustivel sera: %.2f", preco); } else{ printf("\n\n Digite o ano: \n"); scanf("%f", &ano); preco = 2.13 * pow(1.12,ano); printf("\n\n O preço do combustivel sera: %.2f \n\n", preco); } break; case 3: //Exercicio 12 printf("\n Escreva 3 numeros \n"); scanf("%d","%d","%d",a, b, c); printf("\nValores em ordem crescente (do menor para o maior)\n"); if ((a < b) && (b < c)){ printf("%d - %d - %d", a, b, c); } else if ((a < c) && (c < b)){ printf("%d - %d - %d", a, c, b); } else if ((b < a) && (a < c)){ printf("%d - %d - %d", b, a, c); } else if ((b < c) && (c < a)){ printf("%d - %d - %d", b, c, a); } else if ((c < a) && (a < b)){ printf("%d - %d - %d", c, a, b); } else{ printf("%d - %d - %d", c, b, a); } break; case 4: //Exercicio 32 printf("\n\n\n Digite a velocidade limite da pista: "); scanf ("%f", &limite); printf("\n\n\n Digite a velocidade do motorista: "); scanf ("%f", &velocidade); if(velocidade <= limite){ printf("\n\n\n Nao havera multa "); } else{ multa = (velocidade - limite) * 5; printf("\n\n\n A multa sera de: %.2f ",multa); } break; case 5: //Exercicio 14 printf("\n\n\n Digite sua idade: "); scanf ("%d", &idade); if(idade <= 16){ printf("\n\n Nao-eleitor "); } else if(idade >= 18 && idade <= 65){ printf("\n\n Eleitor Obrigatorio \n\n"); } else{ printf("\n\n Eleitor Facultativo \n\n"); } break; case 6: //Fim de programa printf("\n\n ----- FIM DE PROGRAMA ----- \n\n"); default: printf("\n\n\n Opção inválida \n\n\n"); } } while (opcao != 6); printf("\n\n\n ----- Obrigado ----- \n\n\n"); }
  2. Inacabado

    || vs && em getchar()

    Andei á martelada para fazer este programa do Livro C Programming Language, mais tempo do que o que eu expectava. Problema: escreve um programa que faça o print de uma palavra por linha. condições: Não usar arrays e trabalhar apenas com: condições (if, else, else if); ciclos(for ou while); operadores(||,&&,!=,==)... enfim toda a matéria que se tem dada até aquela secção do primeiro capitulo do livro do conhecidissímo livro do Dennis Ritchie e Brian Kerningham. #include <stdio.h> #define IN 1 /*inside a word*/ #define OUT 0 /*outside a word*/ /*Write a program that prints its input one word per line*/ int main(void) { int c,state; state=OUT; while((c=getchar())!=EOF) { if(c!=' ' && c!='\t' && c!='\n') { state=IN; putchar(c); } else if(state==IN) { state=OUT; putchar('\n'); } } return 0; } Porreiro o código corre bem, mas e para lá chegar!?! Andei á porra e á massa com aquele primeiro if: if(c!=' ' && c!='\t' && c!='\n') ...porque eu estava naquela de utilizar o operador || em vez do && que fez finalmente o programa correr bem! Mas sinceramente, e esta é a razão deste post ainda não percebi a razão de o operador || em if(c!=' ' || c!='\t' || c!='\n') dar um comportamento inesperado! Alguém me pode dizer o que diferencia estes dois operadores para este caso especifico? Ou seja se estamos a analisar caracter a caracter em c com o getchar() qual é a diferença? Obrigado desde já e um agradecimento especial ao HHH que tanta ajuda tem dado, muitas vezes (eu incluído) sem o pessoal merecer...
  3. PsySc0rpi0n

    Makefile não compila programa correctamente

    Boas. Tenho o seguinte código: #include <avr/interrupt.h> #include <avr/io.h> #include <util/delay.h> #define KEY_INPUT PIND #define LED_OUTPUT PORTB #define LED_DIR DDRB volatile uint8_t key_state = 0; volatile uint8_t key_press = 0; uint8_t get_key_press(uint8_t key_mask){ cli(); key_mask &= key_press; //read key(s) key_press ^= key_mask; //clear key(s) sei(); return key_mask; } void timer_intr_setup(void){ TCCR0B = 1 << CS02; //divide 256 * 256 TIMSK0 = 1 << TOIE0; //enable timer interrupt } int main(void){ timer_intr_setup(); LED_DIR = 0xff; LED_OUTPUT = 0xff; sei(); for(;;){ LED_OUTPUT ^= get_key_press(0x0c); } } ISR (TIMER0_OVF_vect){ static uint8_t ct0, ct1; uint8_t i; i = key_state ^ ~KEY_INPUT; //key changed ? ct0 = ~(ct0 & i); //reset or count ct0 ct1 = ct0 ^ (ct1 & i); //reset or count ct1 i &= ct0 & ct1; //count until roll over key_state ^= i; //thne toggle debounced state //now debounce is finished key_press |= key_state & i; //0->1 key press detect } E o Makefile que estou a usar é: # WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al. # Modified (bringing often-changed options to the top) by Elliot Williams # make all = Make software and program # make clean = Clean out built project files. # make program = Download the hex file to the device, using avrdude. Please # customize the avrdude settings below first! # Microcontroller Type MCU = atmega328p # MCU = attiny2313 # MCU = atmega8 # MCU = attiny45 # Target file name (without extension). TARGET = debounce # Programming hardware: type avrdude -c ? # to get a full listing. # AVRDUDE_PROGRAMMER = dapa AVRDUDE_PROGRAMMER = arduino # AVRDUDE_PROGRAMMER = dt006 #AVRDUDE_PORT = /dev/usb # not really needed for usb AVRDUDE_PORT = /dev/ttyUSB0 # linux # AVRDUDE_PORT = lpt1 # windows ############# Don't need to change below here for most purposes (Elliot) # Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s # Output format. (can be srec, ihex, binary) FORMAT = ihex # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c # If there is more than one source file, append them above, or modify and # uncomment the following: #SRC += foo.c bar.c # You can also wrap lines by appending a backslash to the end of the line: #SRC += baz.c \ #xyzzy.c # List Assembler source files here. # Make them always end in a capital .S. Files ending in a lowercase .s # will not be considered source files but generated files (assembler # output from the compiler), and will be deleted upon "make clean"! # Even though the DOS/Win* filesystem matches both .s and .S the same, # it will preserve the spelling of the filenames, and gcc itself does # care about how the name is spelled on its command-line. ASRC = debounce.S # List any extra directories to look for include files here. # Each directory must be seperated by a space. EXTRAINCDIRS = # Optional compiler flags. # -g: generate debugging information (for GDB, or for COFF conversion) # -O*: optimization level # -f...: tuning, see gcc manual and avr-libc documentation # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -ahlms: create assembler listing CFLAGS = -g -O$(OPT) \ -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \ -Wall -Wstrict-prototypes -Werror -Wno-comment -DF_CPU=16000000UL\ -Wa,-adhlns=$(<:.c=.lst) \ $(patsubst %,-I%,$(EXTRAINCDIRS)) # Set a "language standard" compiler flag. # Unremark just one line below to set the language standard to use. # gnu99 = C99 + GNU extensions. See GCC manual for more information. #CFLAGS += -std=c89 #CFLAGS += -std=gnu89 #CFLAGS += -std=c99 CFLAGS += -std=gnu99 # Optional assembler flags. # -Wa,...: tell GCC to pass this to the assembler. # -ahlms: create listing # -gstabs: have the assembler create line number information; note that # for use in COFF files, additional information about filenames # and function names needs to be present in the assembler source # files -- see avr-libc docs [FIXME: not yet described there] ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs # Optional linker flags. # -Wl,...: tell GCC to pass this to linker. # -Map: create map file # --cref: add cross reference to map file LDFLAGS = -Wl,-Map=$(TARGET).map,--cref,--warn-common # Additional libraries # Minimalistic printf version #LDFLAGS += -Wl,-u,vfprintf -lprintf_min # Floating point printf version (requires -lm below) #LDFLAGS += -Wl,-u,vfprintf -lprintf_flt # -lm = math library LDFLAGS += -lm # Programming support using avrdude. Settings and variables. AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex:i #AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) # Uncomment the following if you want avrdude's erase cycle counter. # Note that this counter needs to be initialized first using -Yn, # see avrdude manual. #AVRDUDE_ERASE += -y # Uncomment the following if you do /not/ wish a verification to be # performed after programming the device. AVRDUDE_FLAGS += -V # Increase verbosity level. Please use this when submitting bug # reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> # to submit bug reports. AVRDUDE_FLAGS += -vvv #Run while cable attached or don't AVRDUDE_FLAGS += -E reset #keep chip disabled while cable attached #AVRDUDE_FLAGS += -E noreset #AVRDUDE_WRITE_FLASH = -U lfuse:w:0x04:m #run with 8 Mhz clock #AVRDUDE_WRITE_FLASH = -U lfuse:w:0x21:m #run with 1 Mhz clock #default clock mode #AVRDUDE_WRITE_FLASH = -U lfuse:w:0x01:m #run with 1 Mhz clock no start up time # --------------------------------------------------------------------------- # Define directories, if needed. #DIRAVR = c:/winavr #DIRAVRBIN = $(DIRAVR)/bin #DIRAVRUTILS = $(DIRAVR)/utils/bin #DIRINC = . #DIRLIB = $(DIRAVR)/avr/lib # Define programs and commands. SHELL = sh CC = avr-gcc OBJCOPY = avr-objcopy OBJDUMP = avr-objdump SIZE = avr-size # Programming support using avrdude. AVRDUDE = avrdude REMOVE = rm -f COPY = cp HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex ELFSIZE = $(SIZE) -A $(TARGET).elf # Define Messages # English MSG_ERRORS_NONE = Errors: none MSG_BEGIN = -------- begin -------- MSG_END = -------- end -------- MSG_SIZE_BEFORE = Size before: MSG_SIZE_AFTER = Size after: MSG_COFF = Converting to AVR COFF: MSG_EXTENDED_COFF = Converting to AVR Extended COFF: MSG_FLASH = Creating load file for Flash: MSG_EEPROM = Creating load file for EEPROM: MSG_EXTENDED_LISTING = Creating Extended Listing: MSG_SYMBOL_TABLE = Creating Symbol Table: MSG_LINKING = Linking: MSG_COMPILING = Compiling: MSG_ASSEMBLING = Assembling: MSG_CLEANING = Cleaning project: # Define all object files. OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) # Define all listing files. LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) # Combine all necessary flags and optional flags. # Add target processor to flags. ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) # Default target: make program! all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \ $(TARGET).lss $(TARGET).sym sizeafter finished end # $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) # Eye candy. # AVR Studio 3.x does not check make's exit code but relies on # the following magic strings to be generated by the compile job. begin: @echo @echo $(MSG_BEGIN) finished: @echo $(MSG_ERRORS_NONE) end: @echo $(MSG_END) @echo # Display size of file. sizebefore: @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi sizeafter: @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi # Display compiler version information. gccversion : @$(CC) --version # Convert ELF to COFF for use in debugging / simulating in # AVR Studio or VMLAB. COFFCONVERT=$(OBJCOPY) --debugging \ --change-section-address .data-0x800000 \ --change-section-address .bss-0x800000 \ --change-section-address .noinit-0x800000 \ --change-section-address .eeprom-0x810000 coff: $(TARGET).elf @echo @echo $(MSG_COFF) $(TARGET).cof $(COFFCONVERT) -O coff-avr $< $(TARGET).cof extcoff: $(TARGET).elf @echo @echo $(MSG_EXTENDED_COFF) $(TARGET).cof $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof # Program the device. program: $(TARGET).hex $(TARGET).eep $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) # Create final output files (.hex, .eep) from ELF output file. %.hex: %.elf @echo @echo $(MSG_FLASH) $@ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ %.eep: %.elf @echo @echo $(MSG_EEPROM) $@ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ # Create extended listing file from ELF output file. %.lss: %.elf @echo @echo $(MSG_EXTENDED_LISTING) $@ $(OBJDUMP) -h -S $< > $@ # Create a symbol table from ELF output file. %.sym: %.elf @echo @echo $(MSG_SYMBOL_TABLE) $@ avr-nm -n $< > $@ # Link: create ELF output file from object files. .SECONDARY : $(TARGET).elf .PRECIOUS : $(OBJ) %.elf: $(OBJ) @echo @echo $(MSG_LINKING) $@ $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) # Compile: create object files from C source files. %.o : %.c @echo @echo $(MSG_COMPILING) $< $(CC) -c $(ALL_CFLAGS) $< -o $@ # Compile: create assembler files from C source files. %.s : %.c $(CC) -S $(ALL_CFLAGS) $< -o $@ # Assemble: create object files from assembler source files. %.o : %.S @echo @echo $(MSG_ASSEMBLING) $< $(CC) -c $(ALL_ASFLAGS) $< -o $@ # Target: clean project. clean: begin clean_list finished end clean_list : @echo @echo $(MSG_CLEANING) $(REMOVE) $(TARGET).hex $(REMOVE) $(TARGET).eep $(REMOVE) $(TARGET).obj $(REMOVE) $(TARGET).cof $(REMOVE) $(TARGET).elf $(REMOVE) $(TARGET).map $(REMOVE) $(TARGET).obj $(REMOVE) $(TARGET).a90 $(REMOVE) $(TARGET).sym $(REMOVE) $(TARGET).lnk $(REMOVE) $(TARGET).lss $(REMOVE) $(OBJ) $(REMOVE) $(LST) $(REMOVE) $(SRC:.c=.s) $(REMOVE) $(SRC:.c=.d) $(REMOVE) *~ # Automatically generate C source code dependencies. # (Code originally taken from the GNU make user manual and modified # (See README.txt Credits).) # # Note that this will work with sh (bash) and sed that is shipped with WinAVR # (see the SHELL variable defined above). # This may not work with other shells or other seds. # %.d: %.c set -e; $(CC) -MM $(ALL_CFLAGS) $< \ | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \ [ -s $@ ] || rm -f $@ # Remove the '-' if you want to see the dependency files generated. -include $(SRC:.c=.d) # Listing of phony targets. .PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \ clean clean_list program No entanto, obtenho os seguintes erros aquando executo o "make" no terminal: et -e; avr-gcc -MM -mmcu=atmega328p -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Werror -Wno-comment -DF_CPU=16000000UL -Wa,-adhlns=debounce.lst -std=gnu99 debounce.c \ | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > debounce.d; \ [ -s debounce.d ] || rm -f debounce.d -------- begin -------- avr-gcc (GCC) 4.9.2 Copyright (C) 2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiling: debounce.c avr-gcc -c -mmcu=atmega328p -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Werror -Wno-comment -DF_CPU=16000000UL -Wa,-adhlns=debounce.lst -std=gnu99 debounce.c -o debounce.o Linking: debounce.elf avr-gcc -mmcu=atmega328p -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Werror -Wno-comment -DF_CPU=16000000UL -Wa,-adhlns=debounce.o -std=gnu99 debounce.o debounce.o --output debounce.elf -Wl,-Map=debounce.map,--cref,--warn-common -lm debounce.o: In function `main': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.text+0x0): multiple definition of `get_key_press' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.text+0x0): first defined here debounce.o: In function `main': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.bss+0x0): multiple definition of `key_press' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.bss+0x0): first defined here debounce.o: In function `timer_intr_setup': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:21: multiple definition of `timer_intr_setup' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:21: first defined here debounce.o: In function `main': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.text.startup+0x0): multiple definition of `main' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.text.startup+0x0): first defined here debounce.o: In function `__vector_16': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:39: multiple definition of `__vector_16' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:39: first defined here debounce.o: In function `main': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.bss+0x1): multiple definition of `key_state' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.bss+0x1): first defined here collect2: error: ld returned 1 exit status Makefile:314: recipe for target 'debounce.elf' failed make: *** [debounce.elf] Error 1 Mas com o seguinte Makefile, a compilação é feita sem erros: PRG = debounce OBJ = debounce.o MCU_TARGET = atmega328p OPTIMIZE = -Os DEFS = -std=c99 LIBS = # You should not have to change anything below here. CC = avr-gcc # Override is only needed by avr-lib build system. override CFLAGS = -g -Wall -Werror -Wno-comment $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS) -DF_CPU=16000000UL override LDFLAGS = -Wl,-Map,$(PRG).map -Wl,--warn-common OBJCOPY = avr-objcopy OBJDUMP = avr-objdump all: $(PRG).elf lst text eeprom $(PRG).elf: $(OBJ) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) # dependency: debounce.o : debounce.c clean: rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak rm -rf *.lst *.map $(EXTRA_CLEAN_FILES) lst: $(PRG).lst %.lst: %.elf $(OBJDUMP) -h -S $< > $@ # Rules for building the .text rom images text: hex bin srec hex: $(PRG).hex bin: $(PRG).bin srec: $(PRG).srec %.hex: %.elf $(OBJCOPY) -j .text -j .data -O ihex $< $@ %.srec: %.elf $(OBJCOPY) -j .text -j .data -O srec $< $@ %.bin: %.elf $(OBJCOPY) -j .text -j .data -O binary $< $@ # Rules for building the .eeprom rom images eeprom: ehex ebin esrec ehex: $(PRG)_eeprom.hex ebin: $(PRG)_eeprom.bin esrec: $(PRG)_eeprom.srec %_eeprom.hex: %.elf $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@ \ || { echo empty $@ not generated; exit 0; } %_eeprom.srec: %.elf $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@ \ || { echo empty $@ not generated; exit 0; } %_eeprom.bin: %.elf $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@ \ || { echo empty $@ not generated; exit 0; } # Every thing below here is used by avr-libc's build system and can be ignored # by the casual user. FIG2DEV = fig2dev EXTRA_CLEAN_FILES = *.hex *.bin *.srec dox: eps png pdf eps: $(PRG).eps png: $(PRG).png pdf: $(PRG).pdf %.eps: %.fig $(FIG2DEV) -L eps $< $@ %.pdf: %.fig $(FIG2DEV) -L pdf $< $@ %.png: %.fig $(FIG2DEV) -L png $< $@ Queria tentar perceber onde está o problema.
  4. Oliveira Cesar

    Agenda

    Boa Noite!!! Estou com um trabalho de faculdade para fazer! Mais estou com algumas duvidas! 1 - tem que ter limite de 5 clientes cadastrados, e aparecer agenda lotada 2 - Quando não tem clientes tem que mostrar " agenda vazia" 3 - clicando um numero que não tem no menu mostrar a mensagem de erro e retornar ao menu. Estou com este codigo em C só que está dando erro na linha 71! #include <stdio.h> #include <stdlib.h> #include <string.h> //Cada contato possui um nome, telefone e email. struct Contato{ char nome[100]; int telefone; char email; }; int main(){ //Ponteiro para estrutura. Vai ser o nosso vetor de //estruturas dinamicas com os dados da agenda. struct Contato *agenda; int cap; //Capacidade do vetor (tamanho real do vetor). int n; //Numero de contatos cadastrados (tamanho usado). int opc; //Opcao do menu selecionada. int i; FILE *fp; //Abrindo arquivo em modo de leitura ("r" = read). fp = fopen("agenda.dat","r"); //Se retorna NULL eh pq nao encontrou o arquivo. //Isso acontece na primeira vez que rodamos o programa. if(fp==NULL){ n = 0; //Base de dados inicialmente vazia. cap = 20; //Fixamos uma capacidade inicial (ex: 20). //Alocammos o vetor de estruturas de forma //dinamica conforme a capacidade. agenda = (struct Contato *)malloc(sizeof(struct Contato)*cap); } else{ //Arquivo encontrado, logo procedemos com a leitura. //Le o numero de registros. fread(&n, sizeof(int), 1, fp); //A capacidade deve ser maior ou igual a "n" (ex: n*2). cap = n*2; //Alocammos o vetor de estruturas de forma //dinamica conforme a capacidade. agenda = (struct Contato *)malloc(sizeof(struct Contato)*cap); //Leitura dos dados dos registros do arquivo para o vetor. fread(agenda, sizeof(struct Contato), n, fp); //Fecha arquivo apos leitura. fclose(fp); } do{ //Exibe o menu de opcoes. printf("*** Menu ***\n"); printf("1) Cadastrar contato.\n"); printf("2) Exibir contatos.\n"); printf("3) Apagar.\n"); printf("4) Sair.\n"); //Le a opcao selecionada. scanf("%d",&opc); if(opc==1){ //Inserir novo contato no final do vetor. if(n==cap){ //Capacidade esgotada, devemos aumentar o //vetor usando "realloc" (ex: dobrar capacidade). cap *= 2; agenda = realloc(agenda, sizeof(struct Contato)*cap); } //Leitura dos dados. printf("Digite o nome: "); scanf(" %[^\n]",agenda[n].nome); printf("Digite o telefone: "); scanf("%d",&agenda[n].telefone); n++; //Incrementa numero de registros cadastrados. } else if(opc==2){ //Exibe todos contatos cadastrados. for(i=0; i<n; i++){ printf("*** Contato %d ***\n",i+1); printf("Nome: %s\n",agenda.nome); printf("Telefone: %d\n",agenda.telefone); } } else if(opc==3){ //Apaga um contato char nome[100]; int j; scanf("%s",&nome); for(i=0; i<n; i++){ if (strcmp(agenda.nome, nome)==0){ for(j=i+1; j<n; j++){ strcpy(agenda[j-1].nome,agenda[j].nome); agenda[j-1].telefone=agenda[j].telefone; } n--; i=n; } } } //Enquanto nao for opcao de saida continua mostrando menu. }while(opc!=4); if(n>0){ //Se existe algum contato cadastrado //entao grava para o disco. //Abre arquivo em modo de gravacao ("w" = write). fp = fopen("agenda.dat","w"); //Grava o numero de contatos no inicio do arquivo. fwrite(&n, sizeof(int), 1, fp); //Grava os dados do vetor no arquivo. fwrite(agenda, sizeof(struct Contato), n, fp); //Fecha arquivo apos a gravacao. fclose(fp); } //Libera a memoria alocada do vetor. free(agenda); return 0; }
  5. Bem, o programa que eu tenho de fazer consiste na lancamento de um dado para se determinar a categoria da pergunta. A minha duvida é se deveria criar uma estrutura para a categoria ou se simplesmente basta colocar na estrutura da pergunta o numero da categoria e depois comparar com o valor do dado?
  6. riqu3s

    Copiar dados de ficheiro bin para txt

    Boas pessoal, Tenho de fazer uma função que copie, de um ficheiro binário para um de texto, os "id's" de vários clientes correspondentes à venda de bilhetes de uma determinada sessão de cinema. Ainda não criei código, mas pensei em 2 formas de fazer: 1. Abrir o ficheiro binário, copiar 1 a um 1, colocar num vetor de inteiros e de seguida colocá-lo no ficheiro de texto. 2. Manter os 2 ficheiros abertos (não sei se é possível) e copiar os "id's" diretamente para o ficheiro de texto. Se puderem ajudar a escolher qual das técnicas é mais eficaz Obrigado
  7. miguel__1

    Apagar linha de ficheiro txt

    Boas, estou com um problema que não estou a conseguir resolver. Sem nada anteriomente definido e apenas recebendo o ficheiro e o nome a remover tenho que eliminar toda essa linha do ficheiro txt. Como poderia resolver? O Ficheiro é o seguinte: Comfortably Numb;Pink Floyd;6:53;1979 Money For Nothing;Dire Straits;4:59;1985 By The Way;Red Hot Chili Peppers;3:37;2002 The Pretender;Foo Fighters;4:30;2007 Kashmir;Led Zeppelin;8:31;1975 Desde já obrigado.
  8. Olá construí este código em arvore binária mas, está dando erro , apenas preciso fazê-lo apresentar um resultado, que é o numeral 20. alguém poderia me ajudar. #include <stdio.h> <typedef struct arv Arv;> struct arv { char op; float valor; <struct arv *esq, *dir;> }; // Implementar esta função <float avalia (Arv *a)> { <if ((a->esq == NULL) && (a->dir == NULL))> return a->valor; else{> < if(a->op == ‘+’) return avalia(a->esq) + avalia(a->dir)> < if(a->op == ‘-’) return avalia(a->esq) - avalia(a->dir)> < if(a->op == ‘*’) return avalia(a->esq) * avalia(a->dir)> < if(a->op == ‘/’) return avalia(a->esq) / avalia(a->dir)> } } <int main(void)> { < // Árvore para representar a operação: 5 * 3= 15> Arv no[3]; // Em vetor Arv op, val1, val2; // Em variáveis // Vetor no[0].op = '*'; no[0].esq = &no[1]; no[0].dir = &no[2]; no[1].valor = 5; no[2].valor = 3; < printf("Resultado da expressao: %.2f\n", avalia(&no[0]));> // Variáveis op.op = '*'; op.esq = &val1; op.dir = &val2; val1.valor = 5; val2.valor = 3; < printf("Resultado da expressao: %.2f\n", avalia(&op));> }
  9. Luís Barbas

    Cliente/Servidor

    Tenho uma ligaçao cliente/servidor que funciona localmente mas tou com umas dúvidas que não consigo resolver. O programa aceita me vários cliente de uma vez mas não permite fazer as operações em todos eles. E gostaria que a ligação inicializa-se com o start e terminasse com um end. É possível ajudarem-me ? o código é o seguinte: ///////////////Servidor//////////////////// #include<stdio.h> #include<netinet/in.h> #include<sys/types.h> #include<sys/socket.h> #include<netdb.h> #include<stdlib.h> #include<string.h> #define MAX 80 #define SA struct sockaddr //const int MAX_USERS = 5; void error(char *msg) //função para mostar erros { perror(msg); exit(1); } void calculate(int sockfd) //funçao da calculadora { char buff[MAX]; int n; for(;;) { bzero(buff,MAX); //desocupa o buffer read(sockfd,buff,sizeof(buff)); //reading data from socket printf("Expressão do cliente: %s \n ",buff); static int i,size1=1,size2=1,opp; char *op1,*op2; op1=malloc(size1); op2=malloc(size1); for(i=0;i<strlen(buff);i++) { if(buff!='*' & buff!='/' & buff!='+' & buff!='-') { op1=(char)buff; size1++; op1=realloc(op1,size1); } else { int j,s=0; opp=i; for(j=i+1;j<strlen(buff);j++) { op2=(char)buff[j]; size2++; op1=realloc(op1,size2); s++; } break; } } int opr1,opr2,result; opr1=atoi(op1); //converte a string para o inteiro opr2=atoi(op2); if(buff[opp]=='*') { result=opr1*opr2; bzero(buff,MAX); snprintf(buff,10,"%d",result); printf("Resultado: %s",buff); write(sockfd,buff,sizeof(buff)); //escrever o resultado no buffer fprintf(stderr,"A enviar o resultado a partir do servidor : %s\n : ",buff); } else if(buff[opp]=='/') { result=opr1/opr2; bzero(buff,MAX); snprintf(buff,10,"%d",result); write(sockfd,buff,sizeof(buff)); //escrever o resultado no buffer fprintf(stderr,"A enviar o resultado a partir do servidor .Resultado : %s :\n ",buff); } else if(buff[opp]=='+') { result=opr1+opr2; bzero(buff,MAX); snprintf(buff,10,"%d",result); write(sockfd,buff,sizeof(buff)); //escrever o resultado no buffer fprintf(stderr,"A enviar o resultado a partir do servidor .Resultado : %s : \n",buff); } else if(buff[opp]=='-') { result=opr1-opr2; bzero(buff,MAX); snprintf(buff,10,"%d",result); write(sockfd,buff,sizeof(buff)); //escrever o resultado no buffer fprintf(stderr,"A enviar o resultado a partir do servidor .Resultado : %s : \n",buff); } else { write(sockfd,"Expressão invalida.Tente outra vez\n",29); } if(strncmp("exit",buff,4)==0) { printf("Server Exit...\n"); break; } } } int main(int argc,char *argv[]) { int sockfd,connfd,len,pid; struct sockaddr_in servaddr,cli; sockfd=socket(AF_LOCAL,SOCK_STREAM,0); //criação do socket if(sockfd==-1) { printf("socket creation failed...\n"); exit(0); } else printf("Socket successfully created..\n"); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family=AF_LOCAL; if((bind(sockfd,(SA*)&servaddr, sizeof(servaddr)))!=0) // conecta o endereço com o socket { printf("socket bind failed...\n"); exit(0); } else printf("Socket successfully binded..\n"); if((listen(sockfd,5))!=0) //socket esta pronto para receber qualquer cliente novo { printf("Listen failed...\n"); exit(0); } else printf("Server listening..\n"); len=sizeof(cli); for(;;) { connfd=accept(sockfd,(SA *)&cli,&len);//socket vai aceitar qualquer cliente novo if(connfd<0) { printf("server acccept failed...\n"); exit(0); } else printf("server acccept the client...\n"); if((pid==fork())==0) calculate(connfd); else close (connfd); } close(sockfd);//fecha o socket criado } ////////////////////////Cliente/////////////////////// #include<stdio.h> #include<netinet/in.h> #include<sys/types.h> #include<sys/socket.h> #include<netdb.h> #include<string.h> #include<stdlib.h> #define MAX 80 #define SA struct sockaddr void error(char *msg) { perror(msg); exit(1); } void calcy(int sockfd) { char buff[MAX]; int n; for(;;) { bzero(buff,sizeof(buff)); printf("\nIntroduza a expressão: "); n=0; while((buff[n++]=getchar())!='\n'); write(sockfd,buff,sizeof(buff)); //utilizador escreve a expressão no socket bzero(buff,sizeof(buff));//desocupa o buffer read(sockfd,buff,sizeof(buff));//le resultado do socket printf("Resultado: %s ",buff); if((strncmp(buff,"exit",4))==0) { printf("Client Exit...\n"); break; } } } int main(int argc,char *argv[]) { int sockfd; struct sockaddr_in servaddr,cli; sockfd=socket(AF_LOCAL,SOCK_STREAM,0); //cria o socket if(sockfd==-1) { printf("socket creation failed...\n"); exit(0); } else printf("Socket successfully created..\n"); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family=AF_LOCAL;//socket LOCAL (connect(sockfd,(SA *)&servaddr,sizeof(servaddr))!=0);//conexão ao servidor calcy(sockfd);//chama a funçao da calculadora printf("connected to the server..\n"); close(sockfd);//fecha o socket }
  10. PsySc0rpi0n

    Lei Quadrática do Excel em C

    Boas pessoal. Por curiosidade apenas, alguém sabe como implementar o método que o Excel usa para calcular a equação de uma Linha de Tendência de uma curva pela Lei Quadrática? Muito por alto o que o Excel faz é uso das seguintes funções: 2nd Order Polynomial Trendline Equation: y = (c2 * x^2) + (c1 * x ^1) + b c2: =INDEX(LINEST(y,x^{1,2}),1) C1: =INDEX(LINEST(y,x^{1,2}),1,2) b: =INDEX(LINEST(y,x^{1,2}),1,3) Lendo a descrição das funções INDEX e LINEST, respectivamente, dizem: INDEX - returns the value of an element in a table or an array, selected by the row and column number indexes LINEST - returns statistics that describe a linear trend matching known data points, by fitting a straight line using the least squares method.
  11. joanacs

    Imprimir informação de uma lista ligada

    Boa tarde! Estou a desenvolver um programa em C onde tenho de fazer a listagem de todos os clientes existentes numa lista ligada. Inicialmente li todos os clientes de um ficheiro de texto para a lista ligada só que quando vou a imprimir na consola, o programa só estou a imprimir a última data guardada no ficheiro. Se me puderem ajudar, agradecia! - Ficheiro .txt: 123456789 0 Paulo Silva 555666777 2 Marta Nunes Cabral 4 1 12 12 2017 17 12 2017 5 0 20 04 2018 123123123 3 Maria Pimentel 5 2 01 10 2017 10 10 2017 5 1 13 01 2018 15 01 2018 4 0 17 04 2018 111111111 1 Raquel Marques 3 0 26 05 2018 28 05 2018 - Output: CLIENTES: 123456789 0 Paulo Silva 555666777 2 Marta Nunes Cabral 5 0 20/4/2018 17/12/2017 5 0 20/4/2018 17/12/2017 123123123 3 Maria Pimentel 4 0 17/4/2018 15/1/2018 4 0 17/4/2018 15/1/2018 4 0 17/4/2018 15/1/2018 111111111 1 Raquel Marques 3 0 26/25/2018 15/1/2018 struct data_inicio {int dia, mes, ano;}; struct data_entrega {int dia, mes, ano;}; typedef struct aluguer alu, *p_aluguer; struct aluguer { int idGuitarra; int estado_aluguer; int n_alugueres; struct data_inicio d_i; struct data_entrega d_e; p_aluguer prox; }; typedef struct cliente cli, *p_cliente; struct cliente{ int nif; char nomeCliente[ST_TAM]; struct aluguer a; p_cliente prox; }; /*- CRIAÇÃO DA LISTA LIGADA CLIENTES ----------------------------------------------*/ p_cliente criaLista(char *nomefich){ p_cliente lista = NULL, novo, aux = lista; cli c; FILE *f; f = fopen(nomefich,"rt"); if(f == NULL){ printf("Erro no acesso ao ficheiro.\n"); return NULL; } c.prox = NULL; while(fscanf(f, "%d %d %49[^\n]", &c.nif , &c.a.n_alugueres, c.nomeCliente) == 3){ for(int i = 0; i < c.a.n_alugueres; i++){ fscanf(f, "%d %d %d %d %d", &c.a.idGuitarra, &c.a.estado_aluguer, &c.a.d_i.dia, &c.a.d_i.mes, &c.a.d_i.ano); if(fgetc(f) != '\n'){ fscanf(f, "%d %d %d\n", &c.a.d_e.dia, &c.a.d_e.mes, &c.a.d_e.ano); } } novo = malloc(sizeof(cli)); if(novo == NULL){ printf("Erro na alocaçao de memoria.\n"); fclose(f); return lista; } *novo = c; if(!lista) lista=novo; else aux->prox=novo; aux=novo; } return lista; } /*- LISTAGEM DE TODOS OS CLIENTES ATIVOS ------------------------------------------*/ void mostraClientes(p_cliente c){ printf("\n\nCLIENTES:\n\n"); while(c != NULL){ printf("%d %d %s\n", c->nif, c->a.n_alugueres, c->nomeCliente); for(int i = 0; i < c->a.n_alugueres; i++){ printf("%d %d %d/%d/%d ", c->a.idGuitarra, c->a.estado_aluguer, c->a.d_i.dia, c->a.d_i.mes, c->a.d_i.ano); printf("%d/%d/%d\n", c->a.d_e.dia, c->a.d_e.mes, c->a.d_e.ano); //c = c->prox; } c = c->prox; } }
  12. riqu3s

    Listar a partir de ficheiro txt

    Boas pessoal, no programa que estou a tentar fazer já consigo registar um cliente e escrever os dados num ficheiro de texto, mas quando tenciono listar todos os clientes ou algum específico através do NIF, dá um erro e não apresenta nada do que é suposto... se alguém me puder ajudar #include <stdio.h> #include <stdlib.h> #include <string.h> // biblioteca de funções de strings #include <ctype.h> // para usar o toupper() #include "structs.h" // ficheiro onde estão as structs typedef struct { char nome[50], sexo[30], username[30]; int idade, nif, id; } CLIENTE; void syst() { // função para parar o sistema system("pause"); system("cls"); } FILE* abrir_ficheiro(char caminho[], char modo) { // função para abrir o ficheiro de texto FILE *file; switch (toupper(modo)) { // coloca o modo em letras maiusculas case 'W': file = fopen(caminho, "w"); // w - write break; case 'R': file = fopen(caminho, "r"); // r - read break; case 'A': file = fopen(caminho, "a"); // a - append break; } if (file == NULL) { puts("Falha na abertura do ficheiro!"); exit(0); } return file; } void guardar_ficheiro(CLIENTE cliente) { // função para guardar dados no ficheiro FILE *file; file = abrir_ficheiro("clientes.txt", 'a'); // abre o ficheiro para acrescentar fprintf(file, "%s %d %s %d\n", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); // escreve no ficheiro o nome, idade, sexo e nif fclose(file); printf("Registo efetuado com sucesso!\n"); syst(); } void mostrar() { // função para mostrar um cliente específico CLIENTE cliente; FILE *file; file = abrir_ficheiro("clientes.txt", 'r'); while (!feof(file)) { //enquanto não chegar ao fim do ficheiro fscanf(file, "%s %d %s %d\n", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); // lê do ficheiro o nome, idade, sexo e nif printf("CLIENTE: %s\nIDADE: %d\nSEXO: %s\nNIF: %d", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); } fclose(file); syst(); } void mostrar_especifico() { CLIENTE cliente; FILE *file; char username[30]; int opcao, verif_nif, cont = 0; printf("Informe o NIF do cliente: "); fflush(stdin); scanf(" %d", &verif_nif); file = abrir_ficheiro("clientes.txt", 'r'); while(!feof(file)) { fscanf(file, "%s %d %s %d\n", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); if(cliente.nif == verif_nif) { printf("CLIENTE: %s\nIDADE: %d\nSEXO: %s\nNIF: %d", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); cont++; } } fclose(file); if(cont == 0); printf("\nO NIF informado nao esta registado"); syst(); } int menu() { int opcao; do { puts("MENU: "); puts("1 - REGISTAR CLIENTE"); puts("2 - LISTAR TODOS OS CLIENTES"); puts("3 - LISTAR CLIENTE ESPECIFICO"); puts("0 - SAIR"); printf("OPCAO: "); scanf("%d", &opcao); if (opcao < 0 || opcao > 3) { puts("\nOPCAO INVALIDA, TENTE NOVAMENTE!"); syst(); } } while (opcao < 0 || opcao > 3); system("cls"); return opcao; } void registar(CLIENTE *cliente) { int opcao; do { printf("NOME: "); fflush(stdin); gets(cliente->nome); do { printf("SEXO: [1] - Masculino\t[2] - Feminino\n"); printf("Opcao: "); scanf("%d", &opcao); if (opcao == 1) { strcpy(cliente->sexo, "Masculino"); } else { if (opcao == 2) { strcpy(cliente->sexo, "Feminino"); } else { printf("Opcao Invalida!\n"); } } } while (opcao != 1 && opcao != 2); printf("Idade: "); scanf("%d", &cliente->idade); fflush(stdin); printf("NIF: "); scanf("%d", &cliente->nif); printf("\nConfirma todas as informacoes?\n[1] Sim\t[2] Nao\n"); printf("Opcao: "); scanf("%d", &opcao); if (opcao == 2) syst(); }while(opcao != 1); syst(); } void main() { CLIENTE cliente; while(1) { switch(menu()) { case 1: registar(&cliente); guardar_ficheiro(cliente); break; case 2: mostrar(); break; case 3: mostrar_especifico(); break; default: puts("Finalizando o programa..."); exit(0); } } }
  13. Florindo

    Ciclo infinito

    #include <stdio.h> #include <stdlib.h> #include "lab.h" #include <time.h> /*int repetido(int a,int b); for(i=0;i<=13){ if(V) } */ // char *V[13] = {"2","3","4","5","6","7","8","9","10","A","R","V","D"}; int repetido(int a, int b){ int i,j; char *V[13] = {"2","3","4","5","6","7","8","9","10","A","R","V","D"}; char N[4] = {'\3','\4','\5','\6'}; char VR[13]; char NR[4]; for(i=0;i<13;i++){ for(j=0;j<4;j++){ if(VR==V[a] && NR[j]==N){ a=rand()%13; b=rand()%4; } else{ VR[i+1]==V[a]; NR[j+1]==N[a]; } } } } int pontuacao(int a1,int total){ switch(a1){ case 0: total=total+2; break; case 1: total=total+3; break; case 2: total=total+4; break; case 3: total=total+5; break; case 4: total=total+6; break; case 5: total=total+7; break; case 6: total=total+8; break; case 7: total=total+9; break; case 8: total=total+10; break; case 9: if(total+11>21){ total=total+11; } else{ total=total+1; } break; case 10: total=total+10; break; case 11: total=total+10; break; case 12: total=total+10; break; } } int pontuacaocasa(int a1,int total){ switch(a1){ case 0: total=total+2; break; case 1: total=total+3; break; case 2: total=total+4; break; case 3: total=total+5; break; case 4: total=total+6; break; case 5: total=total+7; break; case 6: total=total+8; break; case 7: total=total+9; break; case 8: total=total+10; break; case 9: if(total+11<21){ total=total+11; } else{ total=total+1; } break; case 10: total=total+10; break; case 11: total=total+10; break; case 12: total=total+10; break; } return total; } int sorteiov(int respostav){ respostav = rand()%13; return respostav; } int sorteion(int respostan){ respostan = rand()%4; return respostan; } void desenhacarta(int x, int y,char* valor, char naipe){ DrawRect(x,y,6,6); setxy(x,y); setxy(x+1,y+1); printf("%s",valor); setxy(x+4,y+5); printf("%s",valor); setxy(x+3,y+3); printf("%c",naipe); } void desenhacartacasa(int x, int y,char* valor, char naipe){ DrawRect(x,y,6,6); } void resultado1(int total,int totalcasa){ if(total > 21){ printf("Perdeu o jogo!"); } if(total > totalcasa && total <=21 ){ printf("Ganhou o jogo!"); } if(total == totalcasa && total <=21 && totalcasa <=21){ printf("Perdeu o jogo!"); } if(total < totalcasa && total <=21 && totalcasa <=21){ printf("Perdeu o jogo!"); } } void main(void){ int inicial=0, njogadores,aposta,a,b,vontade1,primeirajogada,segundajogada,totaljogada,i=2,total,vontade2,tj,tc,gv,gn,t; int a1,a2,a3,a4,aa1,aa2,aa3,aa4,b1,b2,b3,b4,bb1,bb2,bb3,bb4; int totall,totalcasa; char *V[13] = {"2","3","4","5","6","7","8","9","10","A","R","V","D"}; char N[4] = {'\3','\4','\5','\6'}; srand(time(NULL)); do{ printf("Pressione 1 para comecar o jogo ou 0 para sair!\n"); scanf(" %d",&inicial); }while(inicial != 0 && inicial!= 1); if(inicial == 0){ printf("Saiu do jogo!"); exit(0); } if(inicial == 1){ } printf("Quantos jogadores tera a partida? (Selecione entre 1-4)\n"); scanf(" %d",&njogadores); switch(njogadores){ case 1: printf("Ira jogar contra a casa!\n"); printf("Qual sera o valor da sua aposta inicial?\n"); scanf(" %d",&aposta); while(aposta <1){ printf("Qual sera o valor da sua aposta inicial?\n"); scanf(" %d",&aposta); } system("cls"); desenhacarta(0,0,V[ sorteiov(a1)],N[sorteion(a1)]); //jogador pontuacao(a1,totall); desenhacarta(0,9,V[sorteiov(a1)],N[sorteion(a1)]); //casa pontuacao(a1,totalcasa); desenhacarta(7,0,V[sorteiov(a1)],N[sorteion(a1)]); //jogador 2 pontuacao(a1,totall); desenhacarta(7,9,V[sorteiov(a1)],N[sorteion(a1)]);//casa2 pontuacaocasa(a1,totalcasa); t=1; do{ t=t+1; setxy(0,20); printf("\n\n\n\n\n\n\n\n\n\n\n Deseja pedir outra carta(1) ou parar por aqui?(0)"); scanf(" %d",&vontade2); pontuacao(a1,totall); }while(vontade2 == 1 && totall<21); do{ desenhacarta(t*7,9,V[sorteiov(a1)],N[sorteion(a1)]); //carta da casa pontuacao(a1,totalcasa); t=t+1; }while(totalcasa<17); //contar os pontos, para verificar se ganhou ou se perdeu setxy(0,22); resultado1(total,totalcasa); }} Não consigo perceber o porquê de isto a partir de um certo ponto quando está a correr entrar num loop infinito ... Se me puderem ajudar , agradeço Cumps ! Em anexo vai a biblioteca necessária para correr o código
  14. Carlos Valente

    Estrutura de Dados indicada para este problema ?

    Boa noite , eu necessito de uma estrutura de dados para guardar e aceder a palavras de tamanho 5 (são 100 palavras) . Sendo que nenhuma destas palavras é igual . Qual é a melhor estrutura de dados para tal , tendo em conta a complexidade ? Eu pensei em hash table , mas não consigo encontrar um hash code que me de indexações de 0 a 100 .
  15. riqu3s

    Guardar dados em ficheiro txt

    Boas pessoal, estou a tentar criar uma função que guarde os dados de um cliente (neste momento apenas o nome), mas sempre que executo o programa os dados ficam guardados em binário. se me poderem ajudar a descobrir onde estou a errar... deixo a função que fiz em baixo void registar_cliente() { FILE *arq_clientes = fopen("clientes.txt", "w"); if (arq_clientes == NULL) { printf("\nErro ao abrir o ficheiro!\n"); exit(1); // aborta o programa } int cont_bytes = 0; //o ID do cliente deve ser gerado automaticamente // cont irá guardar o número total de bytes fseek(arq_clientes, 0, SEEK_END); // o ponteiro aponta para o final do ficheiro cont_bytes = ftell(arq_clientes); // ftell devolve a posiçao atual em bytes t_cliente cliente; if(cont_bytes == 0) { cliente.id = 1; } else { t_cliente ultimo_cliente; fseek(arq_clientes, cont_bytes - sizeof (t_cliente), SEEK_SET); //cont_bytes - sizeof(t_cliente) serve para posicionar // para que possamos chegar ao último cliente registado fread(&ultimo_cliente, sizeof (t_cliente), 1, arq_clientes); cliente.id = ultimo_cliente.id + 1; // o ID do cliente é o ID do último cliente acrescido em 1 } printf("\nDigite o nome do cliente: "); scanf("%99[^\n]%*c", cliente.nome); // ^\n indica para pegar até a quebra de linha (enter) fflush(stdin); fseek(arq_clientes, 0, SEEK_END); fwrite(&cliente, sizeof (t_cliente), 1, arq_clientes); // escreve no arquivo fclose(arq_clientes); printf("\nCliente \"%s\" cadastrado com sucesso!\n", cliente.nome); printf("\nPressione <Enter> para continuar..."); scanf("%*c"); fflush(stdin); }
  16. Boas pessoal, tenho um trabalho que consiste em fazer um programa de gestão de uma loja. Neste momento ainda estou a fazer (ou a tentar) o registo de um novo cliente. Já criei uma parte do código, mas estou com problemas quando insiro o NIF. O nome fica guardado na váriavel que criei mas o NIF apresenta um número diferente daquele que é digitado, talvez um numero que esteja guardado na memória. Se me puderem ajudar a resolver este problema, agradecia. P.S. Inseri o código que já fiz mas o problema em si está na ultima função ("obtem_info()") Obrigado #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 typedef struct dados { char nome[50]; int nif; int n_alugueres; } cliente; void menuPrincipal(); void registarCliente(); cliente obtem_info(); int opcao; int main(int argc, char** argv) { printf("Bem Vindo ao Guitarras P'Alugar!!!\n"); menuPrincipal(); return (EXIT_SUCCESS); } void menuPrincipal() //falta implementar funçoes { cliente loja[MAX]; int total = 0; do { printf("\n\nMENU PRINCIPAL\n\n"); printf("1 - Registar Cliente\n"); printf("2 - Excluir Cliente\n"); printf("3 - Listar Clientes Ativos\n"); printf("4 - Listar Clientes Banidos\n"); printf("5 - Sair\n\n"); printf("Opcao: "); scanf("%d", &opcao); switch (opcao) { case 1: fflush(stdin); system("cls"); registarCliente(loja,&total); break; case 2: fflush(stdin); system("cls"); //excluirCliente(loja,&total); break; case 3: fflush(stdin); system("cls"); //listarAtivos(); break; case 4: fflush(stdin); system("cls"); //listarBanidos(); break; } }while(opcao != 5); printf("\nObrigado e Ate Breve!\n"); } void registarCliente(cliente tab[], int* n) { printf("Atualmente a loja possui %d clientes\n\n",*n); if (*n >= MAX) { printf("Loja cheia!"); } else { tab[*n] = obtem_info(); (*n)++; } } cliente obtem_info() { cliente t; printf("Nome: "); scanf("%s", t.nome); printf("\nNIF: "); scanf("%d",t.nif); //É AQUI QUE ESTÁ O PROBLEMA printf("Nome Introduzido: %s\n",t.nome); printf("NIF Introduzido: %d",&(t.nif)); return t; }
  17. figboy

    Erro ao repetir função

    Boa tarde a todos. Estou a fazer uma função em que para aceitar um utilizador copio a informação desse utilizador de um ficheiro para outro e queria fazer isso por blocos, ou seja, vejo a informação de um utilizador e respondo se quero aceitar ou não, e repito isto até não ter mais utilizadores. Mas quando vou ver a informação do segundo utilizador acontece alguma estranha que não estou a perceber o que é. Vou coloacar o link para a execução do programa, depois de imprimir a informação do segundo utilizador não sei o que acontece. http://i1044.photobucket.com/albums/b446/figboy98/erro_zpsbsuy9d9f.png Se alguém conseguir ajudar fico muito grato void main(){ int j=0; char opcao; FILE *pedidos; pedidos=fopen("../Projeto/Login/Users/pedidos", "r"); char leitor[100000]; while(k!=1){ //listar o primeiro pedido de novo registo for(int i=0; i<5; i++){ fgets(leitor,10000,pedidos); printf("%s", leitor); } printf("Pretende autorizar o registo deste utilizador? (y/n):"); scanf("%c", &opcao); switch(opcao){ case 'y': aceitarUtilizadores(); break; case 'n': //rejeitarUtilizador(); break; } } } int aceitarUtilizadores(){ char leitor[100]; FILE*ativos, *pedidos, *temp; pedidos=fopen("../Projeto/Login/Users/pedidos", "r"); ativos=fopen("../Projeto/Login/Users/UserData", "a"); temp=fopen("../Projeto/Login/Users/temp", "w"); for(int i=0; i<5;i++){ //escreve os dados do utilizador para o ficheiro de UserData fgets(leitor,100,pedidos); fputs(leitor,ativos); } while((fgets(leitor,100,pedidos))!=NULL){ //escreve os restantes pedidos para um ficheiro temporario fputs(leitor,temp); } fclose(pedidos); fclose(ativos); fclose(temp); temp=fopen("../Projeto/Login/Users/temp","r"); pedidos=fopen("../Projeto/Login/Users/pedidos","w"); //abre o ficheiro dos pedidos apagando o seu conteudo while((fgets(leitor,100,temp))!=NULL){ //copia os pedidos que faltam ser analisados para o ficheiro de pedidos fputs(leitor,pedidos); } remove("../Projeto/Login/Users/temp"); fclose(pedidos); pedidos=fopen("../Projeto/Login/Users/pedidos", "r"); rewind(pedidos); if((fgets(leitor,100,pedidos))==NULL){ fclose(pedidos); return k=1; } fclose(pedidos); }
  18. figboy

    Copiar texto de um ficheiro para outro

    Boa noite a todos. Estou a fazer uma função para alterar o texto de um ficheiro, a estratégia que adotei para fazer isto foi escrever num texto temporário o que está no ficheiro original já com as alterações que quero fazer e no fim copiar o que está no ficheiro temporário para o ficheiro final. Mas não sei porque não estou a conseguir copiar do ficheiro temporário para o final, já fiz diversas tentativas para tentar corrigir mas não consegui. Se alguem conseguir detetar o erro fico muito agradecido. void main(){ char leitor[1000000], novaDescricao[10000], NomeTopico[100], pathTopic1[100], leitor1[10000]; int opcao; FILE *topico1, *topicTemp, *topicFinal; system("clear"); printf("Escreva o titulo do tópico a editar:"); scanf(" %[^\n]s", NomeTopico); sprintf(pathTopic1, "../Projeto/Topicos/%s",NomeTopico); printf("Escreva a nova descrição:"); scanf(" %[^\n]s", novaDescricao); topicTemp=fopen("../Projeto/Topicos/temp", "w"); topico1=fopen(pathTopic1, "r"); fputs(novaDescricao,topicTemp); fputs("\n", topicTemp); fgets(leitor, 1000000, topico1); while(fgets(leitor, 1000000, topico1) != NULL){ fputs(leitor,topicTemp); } fclose(topico1); topicFinal=fopen("../Projeto/Topicos/Ola1", "w"); while(fgets(leitor1,10000, topicTemp) !=NULL){ fputs(leitor1, topicFinal); } fclose(topicFinal); }
  19. filipe1996

    Analisador sintáctico XML

    Num âmbito de um trabalho escolar, em que o objetivo é fazer a leitura de um código xml e passar gerar esse ficheiro em latex, usando lex e yacc, e estou com dificuldades para eliminar parte do lixo dentro das tags do xml. <Project Author="BrunoVieira" CommentTableSortAscending="false" CommentTableSortColumn="Date Time" Description="&lt;html&gt;&#13;&#10; &lt;head&gt;&#13;&#10; &lt;style type=&quot;text/css&quot;&gt;&#10; &lt;!--&#10; body { color: #000000; font-family: Dialog; font-size: 12px }&#10; --&gt;&#10; &lt;/style&gt;&#13;&#10; &#13;&#10; &lt;/head&gt;&#13;&#10; &lt;body&gt;&#13;&#10; &lt;/body&gt;&#13;&#10;&lt;/html&gt;&#13;&#10;" DocumentationType="html" ExportedFromDifferentName="false" ExporterVersion="12.2" Name="untitled" TextualAnalysisHighlightOptionCaseSensitive="false" UmlVersion="2.x" Xml_structure="simple"> <DBTable BacklogActivityId="0" DataModel="Physical" Documentation_plain="" Id="mgROAsaGAqFiAQs" Name="Produto" OrmSyncState="Not Sync" PmAuthor="BrunoVieira" PmCreateDateTime="2018-05-08T16:50:11.289" PmLastModified="2018-05-08T17:14:57.921" PrimaryKeyClustered="Unspecified" PrimaryKeyConstraintNamePattern="" QualityScore="-1" SyncType="Not Sync" Type="0" Unlogged="false" UserIDLastNumericValue="0"> //código lex %{ #include "y.tab.h" #include <stdlib.h> #include <string.h> #include <stdio.h> %} %option noyywrap %option yylineno %% "<Project" return IPROJECT; "</Project" return FPROJECT; "<DBTable" return IDBTABLE; "</DBTable" return FDBTABLE; "<DBColumn" return IDBCOLUMN; "</DBColumn" return FDBCOLUMN; [A-Za-z0-9]* {strcpy(yylval.str,yytext); return (TEXTO);} > return '>'; . ; [ \t\n] ; %% //Parte do coódigo do ficheiro de yacc { #include <stdio.h> #include <string.h> #include <stdlib.h> int yylex(); int yyerror(char *); extern int yylineno; %} %union {char str[1000];} %token IPROJECT FPROJECT IDBTABLE FDBTABLE IDBCOLUMN FDBCOLUMN %token<str> TEXTO %start xml //definir o axioma %% xml : | IPROJECT lixo {printf("inicio projeto\n");} '>' project {printf("proj\n");} FPROJECT '>' ; project: tabela project ; ... %% int main(){ yyparse(); //Analisador sintatico return 0; } int yyerror(char *str){ fprintf(stderr,"Linha: %d ,Erro: %s\n",yylineno,str); return 0; } Eu consigo limpar tudo o que está nas tags com este código, mas não consigo deixar só uma parte do código xml. Eu queria deixar o que não está a negrito e apagar o resto. Será que alguém me pode ajudar? Obrigado.
  20. Carlos Eduardo

    Alguém poderia me ajudar no que eu estou errando?

    #include <stdio.h> #include <stdlib.h> main(){ int a, b; printf("\n Insira um numero inteiro, positivo, menor ou igual a 20: "); scanf("%d", &a); printf("\n Digite 1 para somar os impares ou 2 para multiplicar os pares até o numero indicado: "); scanf("%d", &b); { if (b=1); } int i=a; int soma=0; for(i=0 ; i<=a ; i++) { if(i%2!=0) soma=soma+i; } printf("\n O valor da soma dos impares e:\%d", soma); } { if (b=2); } { int i=a; int multiplicacao=2; while (a!=20){ if(a%2==0){ multiplicacao *= a; } ++a; } printf("multiplicacao dos numeros pares: %d", multiplicacao); { if (b>=3); { printf("\n Opcao invalida"); } } { if (a>20); { printf ("\n Opcao invalida"); } } { if (a<0); { printf ("\n Opcao invalida"); } } { if (b<=0); { printf ("\n Opcao invalida"); } } system ("pause"); return 0; }
  21. Tiago99

    O Famoso Tic Tac Toe

    Bom dia, esta será a minha primeira expriência num fórum. Estou a tirar a licenciatura e numa cadeira de programação (maioritariamente em C), temos de criar o jogo do galo com diversas nuances e regrinhas a cumprir. Por exemplo, cada partida tem cinco jogos, sendo o vencedor retirado do que tiver mais vitórias neste cinco jogos, cada ronda o jogador a começar tem de ser diferente, e outras coisas. Já fiz o código e compila sem erros no gcc, deixando apenas alguns avisos. Depois de compilar fui executar o ficheiro e no primeiro gets() da função preencher_dados, aparece me o seguinte erro na shell "Falha de Segmentação: Imagem do núcleo gravada", gostava de perceber o que esta mensagem significa e o que o está a provocar no meu código. Muito obrigado pela ajuda e tempo disponibilizado! #include <stdio.h> #include <stdlib.h> #include <string.h> void preencher_dados (); void tabuleiro_limpo(); typedef struct ficha_de_jogador { char nickname[25]; char simbolo; char nome[25]; int numero_de_estudante; } jogador; jogador jogadores[2]; int main() { int jogos[5]; int jog_atual, num_jogadas, j, l, cont1, cont2; char linha; int coluna, linha_; printf("\n\tBem Vindos ao Jogo do Galo\n"); printf("~~Na escolha da Jogada tenha em atenção ao formato (LINHA)(ENTER)(COLUNA)(ENTER)~~\n"); tabuleiro_limpo(); preencher_dados(); ////Verifica se os símbolos são iguais if (jogadores[0].simbolo==jogadores[1].simbolo){ //verificacao de simbolos iguais printf("ERRO, SIMBOLOS IGUAIS"); return 0; } //Para fazer 5 jogos(melhor de cinco ganha) for(j=0;j<5;j++){ char tabuleiro[3][3]; tabuleiro[1][1]='-'; tabuleiro[1][2]='-'; tabuleiro[1][3]='-'; tabuleiro[2][1]='-'; tabuleiro[2][2]='-'; tabuleiro[2][3]='-'; tabuleiro[3][1]='-'; tabuleiro[3][2]='-'; tabuleiro[3][3]='-'; for(num_jogadas=0; num_jogadas<9; num_jogadas++){ jog_atual=(num_jogadas%2+1)-1; puts(jogadores[jog_atual].nickname); printf("\n\t\t» Qual é a sua jogada?"); scanf("%c",linha); scanf("%d",coluna); if(linha=='A') linha_=1; if(linha=='B') linha_=2; if(linha=='C') linha_=3; //Preenche o tabuleiro if (tabuleiro[linha_][coluna]=='-'){ tabuleiro[linha_][coluna]=jogadores[jog_atual].simbolo; } else{ printf("\nEspaço já ocupado, repita a jogada!"); num_jogadas--; } //Mostra o tabuleiro Preenchido printf("\t ..1. | ..2. | ..3.\n\t A .%c. | .%c. | .%c.\n\t B .%c. | .%c. | .%c.\n\t C .%c. | .%c. | .%c.\n ",tabuleiro[1][1],tabuleiro[1][2],tabuleiro[1][3],tabuleiro[2][1],tabuleiro[2][2],tabuleiro[2][3],tabuleiro[3][1],tabuleiro[3][2],tabuleiro[3][3]); //Verifica vitoria if (tabuleiro[1][1]==tabuleiro[1][2]==tabuleiro[1][3]){ printf("\nO Vencedor foi »»» %s", jogadores[jog_atual].nickname); jogos[j]=jog_atual; } if (tabuleiro[2][1]==tabuleiro[2][2]==tabuleiro[2][3]){ printf("\nO Vencedor foi »»» %s", jogadores[jog_atual].nickname); jogos[j]=jog_atual; } if (tabuleiro[3][1]==tabuleiro[3][2]==tabuleiro[3][3]){ printf("\nO Vencedor foi »»» %s", jogadores[jog_atual].nickname); jogos[j]=jog_atual; } if (tabuleiro[1][1]==tabuleiro[2][1]==tabuleiro[3][1]){ printf("\nO Vencedor foi »»» %s", jogadores[jog_atual].nickname); jogos[j]=jog_atual; } if (tabuleiro[1][2]==tabuleiro[2][2]==tabuleiro[3][2]){ printf("\nO Vencedor foi »»» %s", jogadores[jog_atual].nickname); jogos[j]=jog_atual; } if (tabuleiro[1][3]==tabuleiro[2][3]==tabuleiro[3][3]){ printf("\nO Vencedor foi »»» %s", jogadores[jog_atual].nickname); jogos[j]=jog_atual; } if (tabuleiro[1][1]==tabuleiro[2][2]==tabuleiro[3][3]){ printf("\nO Vencedor foi »»» %s", jogadores[jog_atual].nickname); jogos[j]=jog_atual; } } } //Verifica o vencedor for(l=0; l<5; l++){ cont1=0; cont2=0; if(jogos[l]==1) cont1++; if(jogos[l]==2) cont2++; if(cont1>cont2){ printf("O vencedor dos cinco jogos foi %s", jogadores[0].nickname); }else { if(cont1==cont2) printf("EMPATE, secaaaaa"); else printf(("O vencedor dos cinco jogos foi %s", jogadores[1].nickname)); } } return 0; } void preencher_dados () { int identificacao, i; do{ for(i=0; i<2; i++){ printf("\nName(1) or IDNumber(2)?\n"); scanf("%d",identificacao); if(identificacao!=1&&identificacao!=2){ printf("\nERRO-------------------ERRO"); return 0; } switch(identificacao){ case 1: printf("\nNAME:"); gets(jogadores[i].nome); (jogadores[i].numero_de_estudante)=0; break; case 2: printf("\nIDNUMBER:"); scanf("%d",jogadores[i].numero_de_estudante); break; } printf("\nNICKNAME:"); gets(jogadores[i].nickname); do{ printf("\nSIMBOLO:"); scanf("%c",jogadores[i].simbolo); }while((jogadores[i].simbolo)!='X'||(jogadores[i].simbolo)!='O'); } }while(strcmp((jogadores[0].nickname),(jogadores[1].nickname))==0); } void tabuleiro_limpo() { printf("\t .1. | .2. | .3.\n\t A .-. | .-. | .-.\n\t B .-. | .-. | .-.\n\t C .-. | .-. | .-.\n "); }
  22. Luiz Felipe

    Perdido em código

    Preciso fazer um código para faculdade, mas estou bem perdido pois meu professor me colocou a saída do código e não estou entendendo como começar, alguém pode me dar uma luz para começar? Segue texto abaixo: Calcular a média dos alunos e a situação dos mesmos no final do semestre. Para isto, escreva um programa que deverá ler os dados do aluno (matrícula e nome) e suas notas (nota 1, nota 2 e nota 3). A disciplina e o número de alunos é variável. Por isto, devem ser solicitados (além dos demais dados). Depois de ler todos os alunos, o professor “terminará” a entrada de dados informando o código de matrícula -1 (menos um) – este é o sinal que não existem mais alunos para informar. Assim, devem ser computadas as médias de aluno e da turma. Estes dados, juntamente com os dados lidos, serão listados no final do programa, conforme o exemplo abaixo: https://imgur.com/a/pgtkaMG
  23. Andrei Latis

    O que isso faz n1>n2 ? n1:n2

    Olá pessoal alguem me pode dizer o que isso faz n1>n2 ? n1:n2? Código completo (O n1>n2 ? n1:n2 esta no ultimo printf ) #include <stdio.h> int n1, n2; int main() { printf("Entre com dois numeros inteiros:"); scanf("%d %d", &n1, &n2); printf("A soma entre %d e %d = %d\n", n1, n2, n1+n2); printf( "O maior valor digitado foi: %d\n", n1>n2 ? n1:n2 ); return 0; }
  24. Rafael Schaeffer borges

    Cadastro

    Boa noite pessoal, sou estudante de engenharia e como vários tenho dificuldades, pois isso vim ate vocês( os melhores claro) pedir ajuda pra fazer um trabalho de estrutura de dados em c. O trabalho é o seguinte: 1) construa um programa para auxiliar na alocação de salas de aula. Você deve construir uma stricto contendo os seguintes itens. - Número. - Capacidade. - Projetor e computador ( 0 - não tem, 1 - tem) - vale pros dois juntos. - Sala em uso ( 0 - não, 1 - sim) Você também deve usar uma stricto aninhada que contém os seguintes itens das salas em uso: - Nome do professor. - Turno - Disciplina. O seu programa deve usar um vetor structs É cadastrar essas informações( ou manter as mesmas fixas no programa) e permitir que o usuário escolha ver uma das seguintes informações: 1 - Todas as salas em uso ( mostrando todos os dados) 2- Todas as salas( mostrando somente numero, capacidade e se tem projetor ou nao) Para facilitar os testes você pode preencher os dados de 3 salas e considerar que uma sala é usada em um único turno. Dica: String[0] = '\0' faz com que a Strong seja considerada vazia. É isso meu povo se poderem me ajudar agradeço a todos.
  25. figboy

    Login em C

    Boa noite a todos. Tenho de fazer uma função para fazer login de um utilizador e tenho de usar ficheiros para guardar a informação dos utilizadores. Sendo assim a minha ideia seria ter uma pasta em que cada ficheiro tem o como nome o próprio nome do utilizador e dentro desse ficheiro tinha a sua password. A primeira coisa que estava a pensar fazer é abrir o diretório onde estão os ficheiros dos utilizadores e verificar se existe algum ficheiro com o nome de utilizador que foi introduzido ao fazer login. O código que fiz foi este, mas está me a dar o erro "Falha de segmentação (imagem do núcleo gravada)" e não estou a conseguir perceber onde é o erro. Para além disso acho que não estou a conseguir fazer o que pretendo, mas não estou a ver como o fazer. int login() { char user[20], pass[20]; printf("utilizador:"); //nome de utilizador scanf("%s", &user); printf("Password:"); scanf("%s", pass); //password do utilizador DIR *acesso; struct dirent *d; acesso = opendir("Projeto/Login/Administradores"); while ( (d =readdir(acesso)) != NULL){ if ((d==user){ printf("User encontrado"); } else { printf("User não encontrado"); } } } Se alguém conseguir me dar umas luzes fico muito agradecido. EDIT: Já percebi de onde vem o erro, é no caminho do opendir. Se eu puser o caminho completo já não dá erro(apesar de que continuo sem conseguir que a função faça o que preciso). Contudo eu não queria colocar o caminho completo, queria colocar o caminho apenas a partir de onde tenho o executável para conseguir que o programa funcione em qualquer pc, há maneira de fazer isto? Obrigado Cumps
×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.