以c语言

时间:2015-10-15 09:20:25

标签: c string if-statement scanf strcmp

我试着写一个程序来扫描用户输入的字符串并检查用户输入的内容,如果是真的那么做什么,如果它没有做其他事情。 我写的代码是这样的:

#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;
}

但它不能正常工作。我想因为程序无法识别想要扫描的空间。我该怎么办?(我是c的新手,所以请解释你做了什么。)

3 个答案:

答案 0 :(得分:3)

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

您需要使用fgets()

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

PS:fgets()附带换行符。所以你需要轻轻删除它,如上所示

答案 1 :(得分:2)

你仍然可以使用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);

答案 2 :(得分:0)

您可以使用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] = '\0';
    return i;
    }

lim指定行的最大长度。