我正在尝试在c中向后打印我的字符串,我似乎无法使用空格。我知道如果在scanf函数中最后一个返回的字符后面有任何空格,它将终止,因为没有剩余的字符可以从输入的字符串中扫描。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLETTERS 20
void readStringBackwards();
main()
{
readStringBackwards();
}
void readStringBackwards()
{
printf("Please enter a string of up to 20 characters in length:\n ");
char str[20];
scanf("%s", str);
int i;
int stringlength = strlen(str);
if (stringlength > MAXLETTERS)
{
printf("The string length is too long!");
}
else
{
for( i = stringlength-1; i >= 0; i--){
printf("%c ", str[i]);
}
}
}
本质上该程序最多可接受20个字符,并向后打印字符串。我一直在搜索有关scanf及其工作原理的信息,但很难找到直接的答案。任何提示都表示赞赏。现在,我将得到的是我反向键入的第一个单词。空格后的其他字符将被跳过,并且不会存储在数组中。
答案 0 :(得分:3)
为什么不使用fgets()
代替scanf()
?
char str[21]; // Note 21, not 20 (remember the null terminator)
fgets(stdin, 21, str);
请注意,如果字符串少于20个字符,则会包含换行符,因此您需要将其删除(使用'\0'
覆盖就可以了。)
答案 1 :(得分:3)
scanf("%s", str);
将读取空格,即使它超过20个字符。空白,换行符和制表符被视为空格字符。
考虑使用类似"%20[^\n]"
的格式规范,只要它们不是'\n'
,就应该读取最多20个字符。
编辑正如Oli Charlesworth指出的那样,缓冲区必须至少长度为21而不是20。
答案 2 :(得分:-1)
此代码运行正常但尝试使用gets()
代替scanf()
来读取字符串中的空格!