我试着写一个程序来扫描用户输入的字符串并检查用户输入的内容,如果是真的那么做什么,如果它没有做其他事情。 我写的代码是这样的:
#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的新手,所以请解释你做了什么。)
答案 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指定行的最大长度。