【发布时间】:2018-04-12 15:52:00
【问题描述】:
我在编译代码时遇到了这些错误。另外我认为牙套的位置错误。愿你们帮助我验证我的 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;
}
}
【问题讨论】:
-
i未初始化,但您仍使用它来声明您的数组 inp。之后,scanf 等待char*获取“%s”,但您给出char **(是的,这是一个近似值)。去掉“&”。没有进一步阅读,您必须阅读编译器警告并修复它们。 -
你应该学习如何缩进 C 代码。
-
如果你的代码甚至没有编译,那么你就没有错误,你有编译错误,因此你不是在谈论调试。