我最近接到一个作业,用 C 语言编写一段代码,确定单词列表是否已排序(“已排序”= 所有单词均按单词内字母的升序排列) 我们有许多必须遵循的准则,因此最终结果是完全愚蠢的,而不是简短而高效的代码。
我的代码出现 2 个错误:
"Passing argument 1 of 'sortedsentance' makes pointer from integer without a cast"
expected 'char *' but argument is of type 'char'
这是我的代码-
#include <stdio.h>
int sortedSentance(char *str)
{
int i;
for (i=1; str[i]!='0'; i++)
{
if ((str[i]>str[i-1])||(str[i]==33))
continue;
else
break;
}
if (str[i]=='\0')
return 1;
else
return 0;
}
int main()
{
int num=0, val=0;
char str1;
printf("Please enter the number of strings of length 5 (maximum 5)\n");
scanf("%d", &num);
printf("Please enter %d strings\n", num);
scanf("%s", &str1);
val= (sortedSentance(str1));
if (val==1)
printf("the string %s, is sorted.", str1);
else
printf("the string %s, is not sorted.", str1);
return 0;
}
注释:
- 我们的准则要求必须这样声明函数,我知道应该以不同的方式进行声明。
- 我知道变量
num
没有做任何事情,但同样,为了愚蠢的指导方针。即使没有实际接收到事先的单词数,该算法也会执行其所需的功能。
任何帮助将不胜感激,我已经抓紧我的头发试图理解为什么这个非常简单的代码不起作用,以及我可能犯了什么样的愚蠢错误。
最佳答案
问题出在你的
char str1;
您尝试使用单个字符,但在您的函数中它接受指向字符数组的指针。这是你有两个选择的问题。
char str1[100];//这个100可以根据自己的需要改
2.
char * str1 = new char[100];//This 100 could be changed according to your needs
在第二种情况下,两者都可以工作并记住在 str1 上调用 delete [] 运算符。
此外,我没有查看你的程序的逻辑正确性。刚刚解决了您的编译错误。
附注 由于解决方案需要用 C 语言编写,
您可以使用
char * str1 = malloc(sizeof(char)*(100));
关于c - 非常简单的代码中的指针问题、参数错误和一般问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24352621/