【问题标题】:get and check Strings in c languagec语言获取和检查字符串
【发布时间】:2016-01-13 16:14:34
【问题描述】:

我尝试编写程序来扫描来自用户的字符串并检查用户输入的内容,如果它是真的,做一些事情,如果不是做其他事情。 我写的代码是这样的:

#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新手,所以请解释一下你做了什么。)

【问题讨论】:

  • scanf("%s",&amp;string);改成scanf("%19[^\n]", string);你也需要#include &lt;string.h&gt;
  • scanf 需要其他格式才能读取包含空格的输入。

标签: c string if-statement scanf strcmp


【解决方案1】:

%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() 自带换行符,所以需要如上图轻轻去掉

【讨论】:

    【解决方案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);

    【讨论】:

      【解决方案3】:

      你可以使用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 指定行的最大长度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-24
        相关资源
        最近更新 更多