繁体   English   中英

使用scanf在C中向后打印字符串

[英]Printing a string backwards in C with scanf

我试图在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及其工作方式的信息,但是很难找到直接的答案。 任何提示表示赞赏。 现在,我所得到的只是我反向输入的第一个单词。 空格后的其他字符将被跳过,并且不会存储在数组中。

为什么不使用fgets()而不是scanf()呢?

char str[21]; // Note 21, not 20 (remember the null terminator)
fgets(stdin, 21, str);

请注意,如果字符串少于20个字符,则会包含换行符,因此您需要删除该字符(用'\\0'覆盖是可以的)。

scanf("%s", str); 将读取一个空格,即使其超过20个字符。 空白,换行和制表符被视为空白字符。

考虑使用诸如"%20[^\\n]"类的格式规范,只要不是'\\n' ,就最多可以读取20个字符。

编辑:正如奥利·查尔斯沃思(Oli Charlesworth)所指出的那样,缓冲区必须至少为21,而不是20。

这段代码可以正常工作,但是尝试使用gets()而不是scanf()来读取字符串中的空格!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM