this code is a word counting program but it does only for the letter "a" first it make an array of characters to print b[27] then make every character in b[27] this symbol '`' then plus all the plus all the characters which make a to z characters but when i run if (b[i] j == c[f]) { it does not check all a to z it just check only 'a' character how do i fix this
main() {
char b[27];
char c[10];
int counter = 0;
for (int i = 0; i < 1; i) {
b[i] = '`';
for (int j = 1; j < 27; j) {
b[i] j;
if (b[i] j > 'z' || b[i] j < '`') {
break;
} else {
printf("%c\n", b[i] j);
for (int f = 0; f < 10; f) {
while ((c[f] = getchar()) != EOF) {
if (b[i] j == c[f]) {
counter;
printf("%c = %i\n", b[i] j, counter);
}
}
}
}
}
}
}
CodePudding user response:
It seems as though you are trying to count how many times each alphabetical character appears in the input stream.
It appears you try to start with '`', because it comes one before 'a', as a way to build out an array that contains the alphabet. This is confusing.
This for loop seems to be an attempt to read at most ten characters,
for (int f = 0; f < 10; f) {
while ((c[f] = getchar()) != EOF) {
but the while loop attempts to read the entire input stream.
Note that the negative value of EOF cannot be tested against properly if char (the type of c[f]) is unsigned on your system. Use int when handling the return value of getchar.
You have an unnecessary amount of nested loops. Use one loop to read the input. Use a separate loop to print the output.
With ASCII, 'a' - 'a' is 0, 'b' - 'a' is 1, and so on until 'z' - 'a' is 25. Use these values to index an array which keeps an individual count of each alphabetical character. Flip the operation to retrieve a character from an index (e.g., 'a' 5 is 'f').
An example. Here we ignore non-alphabetic characters, and operate with case-insensitivity.
#include <ctype.h>
#include <stdio.h>
#define ALPHALEN 26
int main(void) {
unsigned counts[ALPHALEN] = { 0 };
int c;
while (EOF != (c = getchar()))
if (isalpha(c))
counts[tolower(c) - 'a'];
for (int i = 0; i < ALPHALEN; i )
printf("%c = %u\n", 'a' i, counts[i]);
}
Alternatively, use fgets to read lines of input.
#include <ctype.h>
#include <stdio.h>
#define ALPHALEN 26
void alphacount(const char *str) {
unsigned counts[ALPHALEN] = { 0 };
while (*str) {
unsigned char c = (unsigned char) *str ;
if (isalpha(c))
counts[tolower(c) - 'a'];
}
for (int i = 0; i < ALPHALEN; i )
printf("%c = %u\n", 'a' i, counts[i]);
}
int main(void) {
char buffer[512];
while (1) {
printf(">> ");
if (!fgets(buffer, sizeof buffer, stdin))
break;
alphacount(buffer);
}
}
CodePudding user response:
main()
{
int c = 0;
int letters[27];
int no[27];
char bar[0];
for(int i = 0; i<27; i)
{
//bar[i] = '|';
letters[i] = 'a';
//letters[i] = i ;
while ((c = getchar()) != EOF )
{
letters[i] = i;
if (c == letters[i])
{
no[letters[i]];
for (int j = 0; j < no[letters[i]]; j)
{
bar[j] = '|';
printf("%c %c\n", c,bar[j]);
}
//printf("%c=%i\n",c[i],no[letters[i]]);
}
}
//printf("%c\n",letters[i] = i);
}
}```
it is still not working what is wrong here
