我写了以下代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 128
int main ()
{
char mychar , string [SIZE];
int i;
int const count =0 ;
printf ("Please enter your string: \n\n");
fgets (string, SIZE, stdin);
printf ("Please enter char to find: ");
mychar = getchar();
for (i=0 ; (string[i] == '\0') ; i++ )
if ( string[i] == mychar )
count++;
printf ("The char %c appears %d times" ,mychar ,count);
return 0;
}
问题是gcc给了我'int const count'的错误:“只读变量'count'的增量。”
什么似乎错了?
谢谢!
答案 0 :(得分:3)
答案 1 :(得分:1)
始终使用 fgets()
而不是gets
。还有很多东西要修复。您不应该使用标准库函数来创建用户界面。标准库真的没有设计。相反,您应该使用 curses库或类似的东西。您也可以将程序编写为接受arguments 作为输入。
正确使用标准库的简短示例。此版本没有任何错误检查,因此它假定用户输入正确。
#include <stdio.h>
int main(int artc, char *argv[])
{
/* arguments are strings so assign only the first characte of the
* third argument string. Remember that the first argument ( argv[0] )
* is the name of the program.
*/
char mychar = argv[2][0];
char *string = argv[1];
int i, count = 0;
/* count the occurences of the given character */
for(; *string != '\0'; ++string)
if(*string == mychar) ++count;
printf("The char ‘%c’ appears %d times.\n", mychar, count);
return 0;
}
用法: ./count "Hello, World!" l
输出: The char ‘l’ appears 3 times.
编辑:至于原始代码。将==
更改为!=
。
for (i=0 ; (string[i] == '\0') ; i++ )
为:
for (i=0 ; (string[i] != '\0') ; i++ )
比较错误。
答案 2 :(得分:1)
要使此示例有效,您还应该更改行:
if(*string == mychar) ++count;
进入
if(string[i] == mychar) ++count;
现在有完整的工作示例:
#include <stdio.h>
int main(int artc, char *argv[])
{
/* arguments are strings so assign only the first characte of the
* third argument string. Remember that the first argument ( argv[0] )
* is the name of the program.
*/
char mychar = argv[2][0];
char *string = argv[1];
int i, count = 0;
/* count the occurences of the given character */
for (i=0 ; (string[i] != '\0') ; i++ )
if(string[i] == mychar) ++count;
printf("The char ‘%c’ appears %d times in the sentence: %s\n", mychar, count, string);
return 0;
}
答案 3 :(得分:0)
请考虑替换为“scanf( "%s", &string)
”。
答案 4 :(得分:0)
获取是危险的,因为它允许您读取比分配空间更多的数据,您可以使用fgets指定要读入的字符数,如果找到换行符则停止。
答案 5 :(得分:0)
获取是危险的,因为它可以获取比变量大小更多的数据。从而使系统暴露于攻击并危及安全性。 应该使用fgets,因为它限制了no。要读的字符。
答案 6 :(得分:0)
这样做:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 128
int main()
{
char mychar, string[SIZE];
int i;
int count=0;
printf("Please enter your string: ");
fgets(string, SIZE, stdin);
printf("Please enter char to find: ");
mychar = getchar();
for (i = 0; (string[i] != '\0'); i++)
if (string[i] == mychar) ++count;
printf("The char %c appears %d times in the sentence: %s" ,mychar ,count, string);
return 0;
}