当我编译代码时遇到这些错误。我也认为牙套位置错误。你们可以帮助我验证 for 循环的格式是否正确并调试代码。我的代码的目的是显示重复的字母和重复字母的出现。
这是编译错误:
secfun@ubuntu:~/Downloads$ gcc -Wall -Werror -o -ansi letter.out letter.c -lm
letter.c: In function ‘main’:
letter.c:14:1: error: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[(sizetype)(i)]’ [-Werror=format=]
scanf("%s", &inp);
^
letter.c: At top level:
letter.c:22:1: error: expected identifier or ‘(’ before ‘{’ token
{
^
letter.c:46:1: error: expected identifier or ‘(’ before ‘{’ token
{
^
cc1: all warnings being treated as errors
这是我的代码:
#include <stdio.h>
#include <string.h>
void printDuplicate(const char inp[], char duplicate);
void printOccurrence(const char inp[], char occurrence);
int main(void)
{
int i;
char inp[i];
char duplicate;
char occurrence;
printf("Enter a word:\n");
scanf("%s", &inp);
printf("Duplicate letter: %c, Occurences: %c", duplicate, occurrence);
printDuplicate(inp, duplicate);
printOccurrence(inp, occurrence);
return 0;
}
void printDuplicate(const char inp[], char duplicate);
{
int i, j;
int k=1;
/* For loop finding duplicate characters */
for (i = 0; i < duplicate; i++)
{
for (j = i + 1; j < duplicate; j++)
{
if (inp[i] == inp [j])
{
if (k == 1 && inp[j] != '\0')
{
inp[j] = '\0';
k++;
}
k=1;
}
}
}
}
void printOccurrence(const char inp[], char occurrence);
{
int freq = 0;
for(i = 0; inp[i] != '\0'; ++i)
{
if(occurrence == inp[i])
++freq;
}
}
最佳答案
这里有一个问题:
...
int i; // here i is not yet initialized, it contains an undetermined value
char inp[i]; // so here you declare an array with an
// undetermined length which is not good
...
然后在该行的末尾有一个额外的 ;
(您打算在其中定义函数):
void printDuplicate(const char inp[], char duplicate);
^ remove this
这里也一样:
void printOccurrence(const char inp[], char occurrence);
那么 i
根本没有在 printOccurrence
中声明。
这也是错误的:
scanf("%s", &inp);
你需要这个:
scanf("%s", inp);
inp
已经是一个指向 char
的指针。
最后但并非最不重要的一点:这是无效的,因为 inp[]
是 const
inp[j] = '\0';
可能还有更多问题。
你可能应该回到你的 C 教科书。
关于c - 修复 C 代码和参数修复编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49800939/