//: C10:StaticVariablesInfunctions.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt

#include <iostream>
using namespace std;

char oneChar(const char* charArray = 0)
{

static const char* s;

/* L'istruzione "if" sottostante controlla se il valore della variabile "charArray" è diverso da "0" oppure no. Nel primo caso associa alla variabile "s" il valore contenuto in "charArray", mentre nel secondo caso (che si ha solo quando la funzione viene chiamata nel "while"), se "s" non è stata inizializzata esce per "exit(1)"; nel caso in cui "s" sia stata invece inizializzata precedentemente, la funzione prima controlla se si è arrivati a fine stringa, poi restituisce il carattere puntato e successivamente incrementa il puntatore, identificando il carattere successivo. */

if(charArray)
{

s = charArray;
return *s;

}
else

if (!s)
{

cout << "un-initialized s" << endl ;
exit(1);

}

if(*s == '\0')

return 0;

return *s++;

}

char* a = "abcdefghijklmnopqrstuvwxyz";

int main()
{

/* oneChar(); */
/* un-initialized s */

oneChar(a);
/* Initializes s to a */

char c;
while((c = oneChar()) != 0)

/* Ciclo per la stampa dei caratteri della stringa.*/


cout << c << endl;

} ///:~