implementar un getline en C
hola, estoy implementando un shell script. Este shell scrip en su main tiene una funcion llamada getline que sirve para leer los comandos que posteriormente deberá analizar y ejecutar. Tengo problemas con la función getline() .. haber si alguien me ayuda, esto es lo que tengo:
//////////////////////////////
char * getline()
{
int i=0;
char linea[MAXLINE];
fprintf(stdout, "%s: %s", getcwd(), PROMPT);
do {
linea[i]=getchar;
i++;
}
while((linea[i-1] != 'n') && (linea[i-1] != EOF));
if(linea[i-1]==EOF) {
printf("ush: saliendo");
exit(0); }
if (strlen(linea) > MAXLINE) { printf("ERROR: Excesivos caracteres"); exit(0); }
return 0;
} /* getline */
/////////////////////////
Al compilar me sale este error:
ush.c: In function `getline':
ush.c:101: error: invalid type argument of `unary *'
no domino mucho los Punteros quizás sea este el problema, pero no encuentro el error.
Agradezco vuestra ayuda
Saludos
//////////////////////////////
char * getline()
{
int i=0;
char linea[MAXLINE];
fprintf(stdout, "%s: %s", getcwd(), PROMPT);
do {
linea[i]=getchar;
i++;
}
while((linea[i-1] != 'n') && (linea[i-1] != EOF));
if(linea[i-1]==EOF) {
printf("ush: saliendo");
exit(0); }
if (strlen(linea) > MAXLINE) { printf("ERROR: Excesivos caracteres"); exit(0); }
return 0;
} /* getline */
/////////////////////////
Al compilar me sale este error:
ush.c: In function `getline':
ush.c:101: error: invalid type argument of `unary *'
no domino mucho los Punteros quizás sea este el problema, pero no encuentro el error.
Agradezco vuestra ayuda
Saludos
te envio una parte de un programa con el que estoy
trabajando ahora. Pienso que puede ayudarte.
// program dix.cpp
// algoritmia algo+
// written in c++ ver 3.1 - 13/3/2004
#include <conio.h>
#include <iomanip.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>
const int MAX = 80;
void Process()
{
char a[MAX+1], *file_name = "ing.dat";
FILE *in = fopen(file_name,"rt");
if(!in)
{
cout << "can't open " << file_name << " - program stoped " << endl;
return;
}
while(!feof(in))
{
fgets(a,MAX,in);
cout << a << endl;
const char *separator = " ";
for(char *tok = strtok(a,separator);tok;tok = strtok(NULL,separator))
cout << tok << endl;
}
fclose(in);
cout << endl;
} // PROCESS
void main()
{
clrscr();
Process();
getch();
} // MAIN
trabajando ahora. Pienso que puede ayudarte.
// program dix.cpp
// algoritmia algo+
// written in c++ ver 3.1 - 13/3/2004
#include <conio.h>
#include <iomanip.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>
const int MAX = 80;
void Process()
{
char a[MAX+1], *file_name = "ing.dat";
FILE *in = fopen(file_name,"rt");
if(!in)
{
cout << "can't open " << file_name << " - program stoped " << endl;
return;
}
while(!feof(in))
{
fgets(a,MAX,in);
cout << a << endl;
const char *separator = " ";
for(char *tok = strtok(a,separator);tok;tok = strtok(NULL,separator))
cout << tok << endl;
}
fclose(in);
cout << endl;
} // PROCESS
void main()
{
clrscr();
Process();
getch();
} // MAIN
El mensaje de error que obtienes es bien poco amable. El error puede esta en esta linea:
linea[i]=getchar;
cámbiala por
linea[i] = getchar();
Ahora, si no era eso, no sé.
Ahora, ¿no puedes usar la biblioteca <iostream> que creo que es bastante más generosa, y que te permitirá usar cin, cout, y sobre todo:
fgets(linea, 30, stdin);
que lee una cadena de hasta 30 caracteres desde stdin y los pone en tu array linea. Creo que así la vida sería más fácil.
Alejandro
linea[i]=getchar;
cámbiala por
linea[i] = getchar();
Ahora, si no era eso, no sé.
Ahora, ¿no puedes usar la biblioteca <iostream> que creo que es bastante más generosa, y que te permitirá usar cin, cout, y sobre todo:
fgets(linea, 30, stdin);
que lee una cadena de hasta 30 caracteres desde stdin y los pone en tu array linea. Creo que así la vida sería más fácil.
Alejandro
