Pure C function pointer on printing vowels twice


 
Thread Tools Search this Thread
Top Forums Programming Pure C function pointer on printing vowels twice
Prev   Next
# 12  
Old 05-17-2017
Thanks Don and corona688!
I think my problem is my mis-understanding of the function putchar(c) so that I re-wrote it with putc() which helped me understand it.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>

/*Print a char twice like putchar, return char if successful, or EOF on error.*/

int putcharTwice(int c)
{
    if (putc(c, stdout) == EOF || putc(c, stdout) == EOF)  {//Q1
    return EOF;
    } else {
    return 0;        //NOT return c;
    }
}

#define NUM_CHARS (UCHAR_MAX + 1)    //UCHAR_MAX is in limits.h

  int (*table[NUM_CHARS]) (int);   //Q2, So moved outside main() to see this function pointer

int main(int argc, char **argv)
{
/*This declares table as array of function pointers */
    int i;
    int c;

    for (i = 0; i < UCHAR_MAX; i++) {
    // default is to call putchar 
    table[i] = putchar;
    }

    // but lower-case vowels show up twice 
    table['a'] = putcharTwice; //Q3, and following 4 lines
    table['e'] = putcharTwice; //Q3
    table['i'] = putcharTwice; //Q3
    table['o'] = putcharTwice; //Q3
    table['u'] = putcharTwice; //Q3

    while ((c = getchar()) != EOF) {
    table[c] (c); //Q4,
    }
    return 0;
}

Thanks a lot again!
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Segmentation fault when I pass a char pointer to a function in C.

I am passing a char* to the function "reverse" and when I execute it with gdb I get: Program received signal SIGSEGV, Segmentation fault. 0x000000000040083b in reverse (s=0x400b2b "hello") at pointersExample.c:72 72 *q = *p; Attached is the source code. I do not understand why... (9 Replies)
Discussion started by: jose_spain
9 Replies

2. UNIX for Dummies Questions & Answers

Counting vowels in string. "Comparison pointer-integer".

I'm trying to write a programme which scans strings to find how many vowels they contain. I get an error saying that I'm trying to compare a pointer and an integer inif(*v == scanme){. How can I overcome this ? Also, the programme seems to scan only the first word of a string e.g.: if I type "abc... (1 Reply)
Discussion started by: fakuse
1 Replies

3. Programming

Trivial doubt about C function pointer

Hi, In the below C code, #include <stdio.h> void print() { printf("Hello\n"); } int main() { void (*f)() = (void (*)()) print; f(); (*f)(); } I wonder, how the syntaxes "f()" and "(*f)()" are treated as same without any error? Is this an improvement or ANSI/ISO... (1 Reply)
Discussion started by: royalibrahim
1 Replies

4. Programming

structure pointer array as function parameters

if i create an array of pointers to a structure "struct node" as: struct node *r; and create "n" number of "linked lists" and assign it to the various struct pointers r using some function with a return type as structure pointer as: r=multiplty(.......) /*some parameters*/ is... (2 Replies)
Discussion started by: mscoder
2 Replies

5. UNIX for Dummies Questions & Answers

Printing pointer address

How can I print the memory address of a pointer using printf (or any other STDOUT functions?). I see in Linux its %p but not in unix, help? thanks (5 Replies)
Discussion started by: perleo
5 Replies

6. Programming

Function Returning Pointer

Hi guys. how a functions such fdopen, ... can return pointer? are these functions use static memory(variables)? (6 Replies)
Discussion started by: majid.merkava
6 Replies

7. Programming

Function pointer to inline function ?

Hi. Problem: I have to parse the payload of a packet. The payload could be in Big Endian Format (network byte order) or little. That depends on a flag present in the header of the packet. Solution: A horrible solution could be to check for that flag everytime I have to read a field in the... (11 Replies)
Discussion started by: emitrax
11 Replies

8. Programming

How to return void function pointer

Hello all im trying to build function that will return void function pointer what is mean is ( not working ) the main function void * myClass::getFunction(int type){ if(type==1) return &myClass::Test1; if(type==2) return &myClass::Test2; } void myClass::Test1(){... (1 Reply)
Discussion started by: umen
1 Replies

9. Programming

Pure Virtual Function in C++

Dear All, Here I want to know why we put =0 in case of pure virtual function, why not =1, =2 or any thing else Please send me answer any one as soon as possible. (1 Reply)
Discussion started by: krishna_sicsr
1 Replies

10. Programming

Problem with function which reutrns pointer to a value

i have a function: char *pcCityIdToCountryName(ADMIN_DB_DATA *pstHEader, unit uiCityID) this returns a pointer to CountryName if cityId is given. to retrieve countryname i give: char *CountryName; CountryName = pcCityIdToCountryName(..................); but when i compile it is giving :... (5 Replies)
Discussion started by: jazz
5 Replies
Login or Register to Ask a Question
pure-statsdecode(8)						     Pure-FTPd						       pure-statsdecode(8)

NAME
pure-statsdecode - Show human-readable dates from a "stats" logfile SYNTAX
pure-statsdecode filename pure-statsdecode - DESCRIPTION
This program decodes Pure-FTPd's "stats" log files and converts timestamps into human-readable dates. OPTIONS
- means to read the standard input. filename is a log file produced with pure-ftpd -O ftpstats:/path/to/logfile EXAMPLES
To run this program the standard way type: pure-statsdecode /var/log/pureftpd.log > /tmp/pureftpd.humanlog Alternativly you can run it as: cat /var/log/pureftpd.log | pure-statsdecode - | gzip --best > /tmp/pureftpd.humanlog.gz AUTHORS
Frank DENIS <j at pureftpd dot org> SEE ALSO
ftp(1), pure-ftpd(8) pure-ftpwho(8) pure-mrtginfo(8) pure-uploadscript(8) pure-statsdecode(8) pure-pw(8) pure-quotacheck(8) pure-authd(8) RFC 959, RFC 2228, RFC 2389 and RFC 2428. Pure-FTPd team 1.0.36 pure-statsdecode(8)