I';m查找每个字母的频率,尽管它总是为所有字母返回0 int main(){ 字符串[100]; int c=0,计数[26]={0},x; 获取(字符串); while(字符串[c]!='\0'){ 如果(string[c]>='a'&&string[c]#包括 int main(){ 字符串[100]; int c=0,计数[26]={0},x; scanf(“%s”,字符串(&s); while(字符串[c]!='\0'){ 如果(string[c]>='a'&&string[c]#包括 int main(){ 字符串[100]; int c=0,计数[26]={0},x; scanf(“%s”,字符串(&s); while(字符串[c]!='\0'){ if(string[c]>='a'&&string[c]
隐式声明意味着必须在调用之前定义函数,或者必须定义其原型,并且此代码正在生成隐式声明警告,因为gets()已从c11标准中删除,因为它在检查数组绑定时不起作用,并且它的原型在stdio头文件中不存在。I';m查找每个字母的频率,尽管它总是为所有字母返回0 int main(){ 字符串[100]; int c=0,计数[26]={0},x; 获取(字符串); while(字符串[c]!='\0'){ 如果(string[c]>='a'&&string[c]#包括 int main(){ 字符串[100]; int c=0,计数[26]={0},x; scanf(“%s”,字符串(&s); while(字符串[c]!='\0'){ 如果(string[c]>='a'&&string[c]#包括 int main(){ 字符串[100]; int c=0,计数[26]={0},x; scanf(“%s”,字符串(&s); while(字符串[c]!='\0'){ if(string[c]>='a'&&string[c],c,C,隐式声明意味着必须在调用之前定义函数,或者必须定义其原型,并且此代码正在生成隐式声明警告,因为gets()已从c11标准中删除,因为它在检查数组绑定时不起作用,并且它的原型在stdio头文件中不存在。 否则程序工作正常。隐式声明意味着必须在调用之前定义函数,或者必须定义其原型,并且此代码正在生成隐式声明警告,因为gets()已从c11标准中删除,因为它在检查数组绑定时不起作用,并且它的原型在stdio头文件中不存在。 否则程序工作正常。get()使用起来有风险。由于get()不执行任何数组绑定测
否则程序工作正常。隐式声明意味着必须在调用之前定义函数,或者必须定义其原型,并且此代码正在生成隐式声明警告,因为gets()已从c11标准中删除,因为它在检查数组绑定时不起作用,并且它的原型在stdio头文件中不存在。 否则程序工作正常。
get()
使用起来有风险。由于get()不执行任何数组绑定测试,因此它会出现缓冲区溢出。get()
会一直读取,直到看到换行符为止
尝试scanf(“%99[^\n]”,string);
而不是您的代码get(string);
尝试此修改后的代码。这将起作用:-
#include <stdio.h>
int main (){
char string[100];
int c=0,count[26]={0},x;
scanf("%s",&string);
while(string[c]!='\0'){
if (string[c] >= 'a' && string[c] <= 'z') {
x = string[c] - 'a';
count[x]++;
}
c++;
}
for (c = 0; c < 26; c++){
printf("%c occurs %d times in the string.\n", c + 'a', count[c]);
}
return 0;
}
gets()
使用起来有风险。由于gets()不执行任何数组绑定测试,它会遭受缓冲区溢出。gets()
会一直读取,直到看到换行符为止
尝试scanf(“%99[^\n]”,string);
而不是您的代码get(string);
尝试此修改后的代码。这将起作用:-
#include <stdio.h>
int main (){
char string[100];
int c=0,count[26]={0},x;
scanf("%s",&string);
while(string[c]!='\0'){
if (string[c] >= 'a' && string[c] <= 'z') {
x = string[c] - 'a';
count[x]++;
}
c++;
}
for (c = 0; c < 26; c++){
printf("%c occurs %d times in the string.\n", c + 'a', count[c]);
}
return 0;
}
这是一个警告,而不是一个错误。当您使用其中声明的任何I/O函数时,请执行
#include
。对我有效(使用get
和忽略get
并使用预定义字符串)。你能显示你的I/O吗?@TonyTannous你对在StackOverflow编辑器中创建一致缩进的有效方法感兴趣吗?我测试了你的代码,效果很好。问题应该出在其他地方,可能是你输入文本的方式。只需尝试类似于echo aab | your | u prog
的方法。这是一个警告,而不是一个错误。请执行#include
当您使用其中声明的任何I/O函数时。对我有效(使用gets
和忽略gets
并使用预定义字符串)。你能显示你的I/O吗?@TonyTannous你对在StackOverflow编辑器中创建一致缩进的有效方法感兴趣吗?我测试了你的代码,效果很好。问题应该出在其他地方,可能是你输入文本的方式。只需尝试类似于echo aab | your|u prog
的方法。虽然代码可能是正确的,但也可能是正确的tter如果您可以提供解释(您更改了什么,为什么更改),请不要发布文本截图。scanf(“%s”,&string);
与gets
一样不安全,但更糟糕的是,它使用scanf
进行用户输入(scanf
是基于令牌的,而不是基于行的,与用户期望相反),并且错误(%s
使用的是字符*
,而不是字符(*)[100]
。虽然代码可能是正确的,但如果您可以提供解释(您更改了什么,以及为什么更改),请不要发布文本的屏幕截图。scanf(“%s”),&string)
与获取
一样不安全,但更糟糕的是,它使用scanf
进行用户输入(scanf
是基于令牌的,而不是基于行的,这与用户的期望相反),并且获取错误(%s
使用char*
,而不是char(*)[100]
。那么它在哪里定义?@nadiagets
已从C中删除。停止尝试使用它。那么它在哪里定义?@nadiagets
已从C中删除。停止尝试使用它。这仍然会产生垃圾输出。您没有检查scanf
的返回值以查看它是否成功。这仍然可能是错误的生成垃圾输出。您没有检查scanf
的返回值以查看它是否成功。
#include <stdio.h>
int main (){
char string[100];
int c=0,count[26]={0},x;
scanf("%99[^\n]", string);
while(string[c]!='\0'){
if (string[c] >= 'a' && string[c] <= 'z') {
x = string[c] - 'a';
count[x]++;
}
c++;
}
for (c = 0; c < 26; c++){
printf("%c occurs %d times in the string.\n", c + 'a', count[c]);
}
return 0;
}
#include <stdio.h>
int main (){
char string[100];
int c=0,count[26]={0},x;
fgets(string,100, stdin); // 100 is the Max Limit of array
while(string[c]!='\0'){
if (string[c] >= 'a' && string[c] <= 'z') {
x = string[c] - 'a';
count[x]++;
}
c++;
}
for (c = 0; c < 26; c++){
printf("%c occurs %d times in the string.\n", c + 'a', count[c]);
}
return 0;
}