c语言获取和检查字符串

get and check Strings in c language

我尝试编写程序来扫描用户输入的字符串并检查用户输入的内容,如果正确则执行某项操作,如果不正确则执行其他操作。 我写的代码是这样的:

#include<stdio.h>
#include<conio.h>

int main()
{
    char string[20];
    printf("Enter a sentence : ");
    scanf("%s",&string);
    if(strcmp(string,"what's up")==0)
        printf("\nNothing special.");
    else
        printf("\nYou didn't enter correct sentence.");
    getch();
    return 0;
}

但它不起作用 correct.I 认为因为程序无法识别 space 当它想要 scan.What 我应该怎么做?(我是 c 的新手, 所以请解释一下你做了什么。)

%s 格式说明符不能用于扫描带有 space 的字符串。

您需要使用fgets()

size_t n;
fgets(string,sizeof(string),stdin);
n = strlen(string);
if(n>0 && string[n-1] == '\n')
string[n-1] = '[=10=]';

PS: fgets()自带一个换行符character.So你需要轻轻的去掉它如上图

您仍然可以使用 scanf,但像这样:

#include<stdio.h>
#include<conio.h>

int main()
{
    char string[20];
    printf("Enter a sentence : ");
    scanf(" %[^\n]s",string);
    if(strcmp(string,"what's up")==0)
        printf("\nNothing special.");
    else
        printf("\nYou didn't enter correct sentence.");
    getch();
    return 0;
}

为了防止缓冲区溢出,可以这样写scanf(" %19[^\n]s",string);

可以使用getline1()函数获取整行如下图:

 /* getline1: read a line into s, return length*/
    int getline1(char s[],int lim)
    {
    int c, i;
    for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
    s[i] = c;
    if (c == '\n') {
    s[i] = c;
    ++i;
    }
    s[i] = '[=10=]';
    return i;
    }

lim 指定行的最大长度。