我正在尝试编写一个C程序来计算元音、击键和字母字符的数量。按键计数器正在工作,但元音计数器总是关闭1个元音。alpha计数器不工作。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
int keystrokes = 0; //Number of keystrokes.
int letters = 0; //Number of total letters.
int vowels = 0; //Number of vowels.
int i = 0;
char sentence[0]; //Chararacter array specified to users input.
while((sentence[i] = getchar()) != '\n')
{
if(sentence[i] == 'a' || sentence[i] == 'e' || sentence[i] == 'i' || sentence[i] == 'o' ||sentence[i] =='u'|| sentence[i] == 'A' || sentence[i] == 'E' || sentence[i] == 'I' || sentence[i] == 'O' ||sentence[i] == 'U' )
{
++keystrokes;
++letters;
++vowels;
}
else
{
if (isalpha(sentence[i]) == 1) // if character is true
{
++keystrokes;
++letters;
}
else
{
++keystrokes;
i++;
}
}
}
printf("SAMPLE OUTPUT, for EACH sentence above:\n");
printf("Keystrokes %d \n", keystrokes);
printf("Alpha Characters %d \n", letters);
printf("Vowels %d \n", vowels);
return 0;
}发布于 2015-05-01 07:56:13
你在这里有很多问题。通过说char sentence[0],您实际上表示存储输入的内存为零字节。访问sentence[i]将是“越界的”,并覆盖内存的其他部分,导致未定义的行为。
首先,将char sentence[0]更改为char sentence[100]。然后仔细查看计数器的增量位置,即if/else流在程序中是什么样子的。举个例子:目前,当您有一个元音时,不会检查isalpha(),也不会检查i++。
发布于 2015-05-01 07:54:44
你的问题是你有由内存损坏引起的未定义的行为。
char sentence[0];它声明了一个0字符数组。只要去掉数组和i索引即可。也就是说,将char sentence[0]更改为类似于char current_char的内容,然后用current_char替换sentence[i]的所有实例。
发布于 2015-05-01 09:51:08
我同意Alan AU关于用get_char取代sentence的观点。我还将(isalpha(sentence[i]) == 1)更改为(isalpha(sentence[i]))。
我承认我仍然是编程新手,但是您的代码并没有正确地递增字母,直到我进行了更改。
https://stackoverflow.com/questions/29979632
复制相似问题