Stdin\out

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);
}

1
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
0

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

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
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);    

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;
}
0

dlaczego moge wykonać instrukcje argv++;
a temp ++; już nie

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.

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;
}

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/

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