Ahora mismo pasa porque no es necesario limpiar el buffer, dado que no hay basura en stdin, es una de las buenas cosas que tiene fgets... Úsalo solo cuando veas que se salta un scanf o algo.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú///// SERVER PROGRAM /////
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc, const char **argv)
{
wcout << "Creating an instance of a named pipe..." << endl;
// Create a pipe to send data
HANDLE pipe = CreateNamedPipe(
L"\\\\.\\pipe\\my_pipe", // name of the pipe
PIPE_ACCESS_OUTBOUND, // 1-way pipe -- send only
PIPE_TYPE_BYTE, // send data as a byte stream
1, // only allow 1 instance of this pipe
0, // no outbound buffer
0, // no inbound buffer
0, // use default wait time
NULL // use default security attributes
);
if (pipe == NULL || pipe == INVALID_HANDLE_VALUE) {
wcout << "Failed to create outbound pipe instance.";
// look up error code here using GetLastError()
system("pause");
return 1;
}
wcout << "Waiting for a client to connect to the pipe..." << endl;
// This call blocks until a client process connects to the pipe
BOOL result = ConnectNamedPipe(pipe, NULL);
if (!result) {
wcout << "Failed to make connection on named pipe." << endl;
// look up error code here using GetLastError()
CloseHandle(pipe); // close the pipe
system("pause");
return 1;
}
wcout << "Sending data to pipe..." << endl;
// This call blocks until a client process reads all the data
const wchar_t *data = L"*** Hello Pipe World ***";
DWORD numBytesWritten = 0;
result = WriteFile(
pipe, // handle to our outbound pipe
data, // data to send
wcslen(data) * sizeof(wchar_t), // length of data to send (bytes)
&numBytesWritten, // will store actual amount of data sent
NULL // not using overlapped IO
);
if (result) {
wcout << "Number of bytes sent: " << numBytesWritten << endl;
} else {
wcout << "Failed to send data." << endl;
// look up error code here using GetLastError()
}
// Close the pipe (automatically disconnects client too)
CloseHandle(pipe);
wcout << "Done." << endl;
system("pause");
return 0;
}
///// CLIENT PROGRAM /////
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc, const char **argv)
{
wcout << "Connecting to pipe..." << endl;
// Open the named pipe
// Most of these parameters aren't very relevant for pipes.
HANDLE pipe = CreateFile(
L"\\\\.\\pipe\\my_pipe",
GENERIC_READ, // only need read access
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (pipe == INVALID_HANDLE_VALUE) {
wcout << "Failed to connect to pipe." << endl;
// look up error code here using GetLastError()
system("pause");
return 1;
}
wcout << "Reading data from pipe..." << endl;
// The read operation will block until there is data to read
wchar_t buffer[128];
DWORD numBytesRead = 0;
BOOL result = ReadFile(
pipe,
buffer, // the data from the pipe will be put here
127 * sizeof(wchar_t), // number of bytes allocated
&numBytesRead, // this will store number of bytes actually read
NULL // not using overlapped IO
);
if (result) {
buffer[numBytesRead / sizeof(wchar_t)] = '\0'; // null terminate the string
wcout << "Number of bytes read: " << numBytesRead << endl;
wcout << "Message: " << buffer << endl;
} else {
wcout << "Failed to read data from the pipe." << endl;
}
// Close our pipe handle
CloseHandle(pipe);
wcout << "Done." << endl;
system("pause");
return 0;
}
char * fgets ( char * str, int num, FILE * stream );
#include <windows.h>
#include <tchar.h>
int _tmain(int argc, _TCHAR* argv[])
{
printf("Window A\n");
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
TCHAR szExe[] = _T("cmd.exe"); // <-- Could be any program
if(CreateProcess(0, szExe, 0, 0, FALSE, CREATE_NEW_CONSOLE, 0, 0, &si, &pi))
{
// optionally wait for process to finish
//WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
return 0;
}
#include<stdio.h>
struct contacto
{
char nombre[40],direccion[80];
int edad;
long telefono;
};
typedef struct contacto cont;
int main (void)
{
cont c1;
printf("Ingrese el nombre\n");
scanf("%s",c1.nombre);
printf("%s\n",c1.nombre);
return 0;
}
#include<stdio.h>
struct contacto
{
char nombre[40],direccion[80];
int edad;
long telefono;
};
typedef struct contacto cont;
int main (void)
{
cont c1;
printf("Ingrese el nombre\n");
fgets(c1.nombre,40,stdin);
printf("%s\n",c1.nombre);
return 0;
}
Cita de: durasno en 26 Marzo 2013, 02:15 AMLlevas muchísima razón, lo mejor en ese código hubiese sido esto(utilizando variables locales en las funciones):
Como consejo personal para kayron8 por ahora, no te acostumbres a usar variables globales ya que recien te estas iniciando, y como muchos usan este recurso para facilitarse los ejercicios al final terminan complicandose... Igual esto es cuestion de cada uno, mientras entiendan lo que hacen esta bien
Saludos
#include <stdio.h>
#include <stdlib.h>
void metrosAPies();
void piesAMetros();
int main ()
{
int eleccion = 0;
printf("CONVERSOR METROS-PIES\n");
printf("---------------------------\n");
printf("1. Metros a pies.\n");
printf("2. Pies a metros.\n");
printf("\nSelecciona numero: ");
scanf("%d",&eleccion);
if(eleccion == 1)
{
metrosAPies();
}
else if(eleccion == 2)
{
piesAMetros();
}
else
{
printf("\nNo ha seleccionado una opcion correcta.");
}
getchar();
return 0;
}
void metrosAPies()
{
float metros = 0;
float pies = 0;
printf("\nIntroduzca los metros a convertir: ");
scanf("%f",&metros);
pies = metros / 0.3048;
printf ("\n%.2f pies son: %.2f metres\n",pies,metros);
}
void piesAMetros()
{
float metros = 0;
float pies = 0;
printf("\nIntroduzca los pies a convertir: ");
scanf("%f",&pies);
metros = pies * 0.3048;
printf("\n%.2f metros son: %.2f pies\n",metros,pies);
}
Cita de: kayron8 en 26 Marzo 2013, 01:04 AMDe nada, las funciones son sencillas, nada del otro mundo, lo más complicado que puedes ver ahí es la recursividad y el número variable de argumentos pero poco más . . . ¡Que fallo! lo corrijo ahora mismo, es que hace poco he desactivado los avisos del compilador para que no me de el coñazo con algunos avisos innecesarios y se me ha olvidado activarlo.
Wow, muchísimas gracias por ayudarme a resolver el problema, sabía que el ejercicio en sí, no era muy difícil.
El problema lo tengo con las funciones que no me aclaro de familiarizar con ellas.
¡Ojalá solucionase los ejercicios así de rápido!
Por cierto, en la línea 24 te dejaste el &, sino el programa peta
Muchas gracias de nuevo
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int numerouno;
int numerodos;
int resultado;
numerouno = 2;
numerodos = 1;
resultado = 0;
while (numerodos != 0 )
{
resultado = numerouno * numerodos;
numerodos = resultado;
cout << resultado << endl;
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);
#include <stdio.h>
#include <stdlib.h>
float metros = 0;
float pies = 0;
void metrosAPies();
void piesAMetros();
int main ()
{
int eleccion = 0;
printf("CONVERSOR METROS-PIES\n");
printf("---------------------------\n");
printf("1. Metros a pies.\n");
printf("2. Pies a metros.\n");
printf("\nSelecciona numero: ");
scanf("%d",&eleccion);
if(eleccion == 1)
{
printf("\nIntroduzca los metros a convertir: ");
scanf("%f",&metros);
metrosAPies();
printf ("\n%.2f pies son: %.2f metres\n",pies,metros);
}
else if(eleccion == 2)
{
printf("\nIntroduzca los pies a convertir: ");
scanf("%f",&pies);
piesAMetros();
printf("\n%.2f metros son: %.2f pies\n",metros,pies);
}
else
{
printf("\nNo ha seleccionado una opcion correcta.");
}
getchar();
return 0;
}
void metrosAPies()
{
pies = metros / 0.3048;
}
void piesAMetros()
{
metros = pies * 0.3048;
}
Cita de: durasno en 26 Marzo 2013, 00:46 AMDurasno de todas maneras no ingresaba ni los metros ni los pies por lo tanto siempre iba a darle 0 de salida.
Hola! LA variable pies es de tipo float sin embargo tu funcion recibe un char. Si queres ingresar un caracter tenes que declarar a pies como char y en el scanf usar %c
Saludos