我正在学习 C,并且一直在尝试编写一个程序来接受用户输入,并删除其中的任何双空格,然后再次打印出来。我们还没有做数组,所以我需要一个字符一个字符地做。这是我的代码:
#include <stdio.h>
main()
{
char c;
int count;
count = 0;
while ((c = getchar()) != '\n')
if (c == ' ')
count++;
if (c != ' ')
count = 0;
if (count <= 0)
printf("%s", c);
}
但是,此代码不起作用。编译器返回错误
:15: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’
有什么帮助吗?我不知道我做错了什么。
最佳答案
使用%c
格式说明符打印单个char
printf("%c", c);
%s
格式说明符告诉 printf
期望一个以 null 结尾的字符数组(又名字符串)。
由于传递给 printf
的参数(超出格式字符串)的默认提升,错误消息指的是 c
具有 int
类型。 This previous answer对默认促销有很好的描述; this previous thread解释了为什么需要默认促销的一些原因。
关于C char 在编译时显示为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14626657/