patterncMinor
Print character + the ASCII value, 10 pairs per line
Viewed 0 times
theperlinecharactervalueprintasciipairs
Problem
My exercise was:
Write a program that reads input as a stream of characters until encountering
EOF. Have the program print each input character and its ASCII decimal value.
Note that characters preceding the space character in the ASCII sequence are
nonprinting characters. Treat them specially. If the nonprinting character is a
newline or tab, print \n or \t, respectively.
Print 10 pairs per line, except start a fresh line each time a newline character is encountered.
This is my code (regarding the special characters, I defined only
Write a program that reads input as a stream of characters until encountering
EOF. Have the program print each input character and its ASCII decimal value.
Note that characters preceding the space character in the ASCII sequence are
nonprinting characters. Treat them specially. If the nonprinting character is a
newline or tab, print \n or \t, respectively.
Print 10 pairs per line, except start a fresh line each time a newline character is encountered.
This is my code (regarding the special characters, I defined only
\n and \t):#include
int special_chars(int ch);
int main(void)
{
int x;
printf("please enter a some characters, and ctrl + d to quit\n");
special_chars(x);
return 0;
}
int special_chars(int ch)
{
int pairsNum = 0;
while ((ch = getchar()) != EOF)// testing charecters while not end of file.
{
if (ch == '\n')// testing if a control charecter, and printing its
{
printf("\\n ");
pairsNum++;
}
else if (ch == '\t')
{
printf("\\t ");
pairsNum++;
}
else
{
printf("%c,%d ", ch, ch);
pairsNum++;
}
if (pairsNum == 10)// counting the number of outputs, and printing a newline when is 10 (limit).
printf("\n");
}
return ch;
}Solution
A few issues, in no particular order:
-
function is necessary in a short program like this.
-
main defines variable
unnecessary. Just define
taking
be
-
you don't start a new line after reading a \n, as required - it appears that you do when you type at the keyboard because entering a \n causes a new line. But if you redirect input into your program it
does not. Also you don't start a line after each ten, only after the first ten. e.g. if your program executable is called
- put
mainlast to avoid the need for a prototype.
mainnormally takes argc/argv parameters
-
special_chars should be static - but it is debateable whether a separatefunction is necessary in a short program like this.
-
main defines variable
x and passes it to special_chars. This isunnecessary. Just define
ch in special_chars and define the function astaking
void (i.e. nothing)- why does
special_charsreturn a value?
- indenting is wrong
- too many blank lines (8)
- missing {} brackets after
if (pairsNum == 10)
- mixed naming styles (
pairsNumshould bepairs_numorspecial_charsshould
be
specialChars - I prefer the former)special_charsis a bad name for the function.
pairsNumis an odd name;n_pairswould be my choice.
- you don't print a final \n at the end of the program
-
you don't start a new line after reading a \n, as required - it appears that you do when you type at the keyboard because entering a \n causes a new line. But if you redirect input into your program it
does not. Also you don't start a line after each ten, only after the first ten. e.g. if your program executable is called
program$ cat x
abcdefgh
ijklmnop
qrstuvwxyz
$./program < x
please enter a some characters, and ctrl + d to quit
a,97 b,98 c,99 d,100 e,101 f,102 g,103 h,104 \n i,105
j,106 k,107 l,108 m,109 n,110 o,111 p,112 \n q,113 r,114 s,115 t,116 u,117 v,118 w,119 x,120 y,121 z,122 \n $Code Snippets
$ cat x
abcdefgh
ijklmnop
qrstuvwxyz
$./program < x
please enter a some characters, and ctrl + d to quit
a,97 b,98 c,99 d,100 e,101 f,102 g,103 h,104 \n i,105
j,106 k,107 l,108 m,109 n,110 o,111 p,112 \n q,113 r,114 s,115 t,116 u,117 v,118 w,119 x,120 y,121 z,122 \n $Context
StackExchange Code Review Q#21174, answer score: 4
Revisions (0)
No revisions yet.