// zeichenketten.cpp


/****************************************************
Results: 


 int *ptr = 0;   ptr = 0;  &ptr = 0x0018FE9C;


   int a[5] = { 1, 2, 3, 4, 5 };

         a[0] = 1;
         a[1] = 2;
         a[2] = 3;
         a[3] = 4;
         a[4] = 5;

         a = 0x0018FE80;

   ptr = &a[0];          *ptr = 1;

         ptr += 2;       *ptr = 3;
         ptr -= 1;       *ptr = 2;
         ptr += 3;       *ptr = 5;
         ptr -= 1;       *ptr = 4;


 Steuerzeichen  im      String?


 Print some ASCIIs


         ch = X
         ch = Y
         ch = Z
         ch = [
         ch = \
         ch = ]
         ch = ^
         ch = _
         ch = `
         ch = a
         ch = b
         ch = c

 File saved as: alphabet.txt



 Read string from file: alphabet.txt:

 XYZ[\]^_`abc

 File read finished: alphabet.txt


****************************************************/



#include "stdafx.h"
#include <stdio.h>

int main( void )
{

// int-Array pointer
    int *ptr = NULL;	// Pointer init
	printf("\n\n int *ptr = 0; \t ptr = %d;  &ptr = 0x%p; \n", ptr, &ptr);
	// printf(" *ptr = %p ",*ptr);	// So nicht: Absturz! (Pointer-Deref) 

    int a[5] = { 1, 2, 3, 4, 5 };
    printf( "\n\n   int a[5] = { 1, 2, 3, 4, 5 }; \n\n");	    //

    printf( "\t a[0] = %d; \n", a[0]);	    //
    printf( "\t a[1] = %d; \n", a[1]);	    //
    printf( "\t a[2] = %d; \n", a[2]);	    //
    printf( "\t a[3] = %d; \n", a[3]);	    //
	printf( "\t a[4] = %d; \n\n", a[4]);	//
	// printf( "\t a[5] = %d; \n\n", a[5]);	    // Danger!
	printf( "\t a = 0x%p; \n\n", a);	    //

    ptr = &a[0];	// exakt 
	// ptr = a;		// alternativ

    printf( "   ptr = &a[0]; \t *ptr = %d; \n\n", *ptr );	    //

    ptr += 2;
    printf( "\t ptr += 2; \t *ptr = %d; \n", *ptr );	    //

    ptr -= 1;
    printf( "\t ptr -= 1; \t *ptr = %d; \n", *ptr );    //

    ptr += 3;
    printf( "\t ptr += 3; \t *ptr = %d; \n", *ptr );    //

    ptr -= 1;
    printf( "\t ptr -= 1; \t *ptr = %d; \n", *ptr );


// Beispiele aus http://www.cplusplus.com/reference/clibrary/cstdio


// Steuerzeichen im String?
	char string [] = "\n\n Steuerzeichen\tim\tString?\n";	
	puts (string);	// alternativ statt printf()
	


// write to FILE
	//	print the alphabet into alphabet.txt
	FILE * pFile;
	char ch;
	char filename[] = "alphabet.txt";

	pFile=fopen(filename,"w");	// modes: r, w, a, r+, r-, a+
	printf("\n Print some ASCIIs\n\n");
	for (ch = 'X' ; ch <= 'c' ; ch++) {
		putc (ch, pFile);	// Writes a character ch to the stream pFile (!)
		printf("\n\t ch = %c",ch);
		}
	fclose (pFile);
	printf("\n\n File saved as: %s\n\n", filename);


// read a FILE
	FILE *pFilet; 
	const int numofsign = 255;
	char mystring [numofsign];


	printf("\n\n Read string from file: %s:\n\n ", filename);
	pFilet = fopen (filename, "r");
	if (pFilet == NULL) perror ("Error opening file");
	else {
		if ( fgets (mystring, numofsign, pFilet) != NULL )	// read numofsign chars
		puts (mystring);	// put onto screen
		printf("\n File read finished: %s\n\n", filename);
		fclose (pFilet);
	}

// INTERACTION ##################################################################

/* Kommentarbeginn und -Ende bei Bedarf entfernen

// count in FILE
	printf("\n\ngetchar = ?:");
	int val = getchar();		// Get character from stdin

	char searchSign = 0x00;		// gesuchtes Zeichen
	searchSign = (char) val;	// cast to char

	printf("Gesuchtes Zeichen: '%c'\n\n",searchSign);

	FILE * pFilez;	// pointer pFilez
	int cx;
	int n = 0;

	pFilez = fopen (filename,"r");
	if (pFilez == NULL) perror ("Error opening file");
	else
	{
		do {
		cx = fgetc (pFilez);		// Get character from stream
		if (cx == searchSign) n++;		// to count in file
		} while (cx != EOF);
		fclose (pFilez);
		printf ("The file contains %d character(s) '%c'\n\n", n, searchSign);
	}
*/




// wait for prompt
	getchar();
    return 0;
}


