Stdin\out

Odpowiedz Nowy wątek
2017-05-29 14:47
0

czemu program nie chce się łaskawie zkończyć

#include <stdio.h>
void filecopy(FILE*, FILE*);

int main(int argc, char* argv[])
{
    FILE* fp =fopen("dane.txt","r");
    char* program = argv[0];
    printf("%d\n", argc);
    if (argc == 1)
        filecopy(fp, stdout);

    return 0;
}
void filecopy(FILE* ifp, FILE* ofp)
{
    int c;
    while ((c = getc(stdin)) != 0)  // <<<<<------ jak wpisze 0 z klawiatury
        fputc(c, ofp);
}

Pozostało 580 znaków

2017-05-29 14:50
bartek164 napisał(a):
void filecopy(FILE* ifp, FILE* ofp)
{
    int c;
    while ((c = getc(stdin)) != 0)  // <<<<<------ jak wpisze 0 z klawiatury
        fputc(c, ofp);
}

A nie powinno być czasem:

while ((c = getc(stdin)) != '0')  // <<<<<------ jak wpisze 0 z klawiatury

Pozostało 580 znaków

2017-05-29 15:03
0

acha, bo 0 to pierwszy znak z ansi, aha rozumiem

Na tym każdy się złapał :-) - tubiz 2017-06-01 08:41

Pozostało 580 znaków

2017-05-29 15:07
1

'0' to znak, a nie liczba. W ascii wynosi 48, czyli możesz napisać:

while ((c = getc(stdin)) != 48)  // <<<<<------ jak wpisze 0 z klawiatury

"Jesteśmy świadomymi istotami, a życie jest sposobem w jaki wszechświat poznaje sam siebie." prof. Brian Cox

Pozostało 580 znaków

2017-05-29 15:20
0

możecie zobaczyć dlaczego to nie działa?


int main(int argc, char *argv[]){
//char* temp[] = argv; nie można tak przypisać?
int i;
char* temp[argc];
for(i=0;i<argc;++i)
temp[i]=argv[i];

while( ++*temp !=NULL)
  printf("%s\n",*temp);    
edytowany 1x, ostatnio: bartek164, 2017-05-29 15:26
wpisuje się prawidłowo do tablicy temp, a następnie nie wiem dlaczego ale literuje po wszystkich wartościach pojedynczej tablicy, nie wiem dlaczego tam ma byc <=argc - bartek164 2017-05-29 15:43
A nie możesz operować na argv? - atmal 2017-05-29 15:52
nie! bo sie wskażnik przesunie, mam już zrobione nizej ale nie wiem dlaczego do ... nie moge zkompilowac bo pisze ze potrzebuje wartosci do required operand - bartek164 2017-05-29 15:56

Pozostało 580 znaków

2017-05-29 15:54
0
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
int i;

char* temp[2];
for(i=0;i<=argc;++i)
temp[i]=argv[i];

while( *(temp++) != NULL)
  printf("%s\n",*temp);

return 0;
}

Pozostało 580 znaków

2017-05-29 16:01
0

dlaczego moge wykonać instrukcje argv++;
atemp ++; już nie

Pozostało 580 znaków

2017-05-29 16:11
0
bartek164 napisał(a):
while( *(temp++) != NULL)
  printf("%s\n",*temp);

To jest zły sposób na iterowanie. To, że dojdziesz do końca tablicy, nie oznacza, że temp ani tym bardziej *temp będzie NULL, mogą tam być jakieś śmieci. Skoro wiesz, ze masz argc elementów tablicy, iteruj w pętli for aż do ostatniego indeksu. Po to właśnie to argc jest przesyłane, żeby wiedzieć ile tych argumentów jest na liście.

edytowany 1x, ostatnio: GutekSan, 2017-05-29 16:12
a dlaczego niby nie, ale nie o to chodzi.... - bartek164 2017-05-29 16:26
Napisałem ci dlaczego. Nie próbuj przesuwać temp, tylko iteruj po kolejnych elementach temp[]. - GutekSan 2017-05-29 16:35
ale why , argv ma lepsze przywileje ze mozna - bartek164 2017-05-29 16:39
temp jest wskaznikiem na pierwszy element tablicy temp[]. temp++ oznacza temp=temp+1, czyli zwiększ wskażnik o 1 i przypisz go do poprzedniej wartości. To oznacza, że próbujesz przesunąć początek tablicy, zamiast przesuwać się po jej elementach. - GutekSan 2017-05-29 16:43
a argv++ tez jest tablica - bartek164 2017-05-29 16:44
no ja rozumiem co mowisz - bartek164 2017-05-29 16:47

Pozostało 580 znaków

2017-05-29 17:07
0

no a tak?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{

    char** temp = &argv;

    while (*(temp++) != NULL)
        printf("%s\n", *temp);

    return 0;
}
Chyba nie czytasz tego, co Ci piszę... - GutekSan 2017-05-29 17:23
czekaj, co ja tu zrobiłem, no dobra może ten kod nie ma sensu, bo *temp = argv? - bartek164 2017-05-29 17:28

Pozostało 580 znaków

2017-05-29 18:09
0

powinno być raczej

void filecopy(FILE* ifp, FILE* ofp)
{
    int c;
    while ((c = getc(ifp)) != EOF) // tu były DWA błędy
        fputc(c, ofp);
}

http://www.cplusplus.com/reference/cstdio/EOF/


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22, 2017-05-29 18:10
tyyttyyt, nie o to chodziło, bo to był taki program naukowy, czyli bez sensu, ćwiczenia - bartek164 2017-05-29 18:15

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0