我必须编写代码以使实数加倍,但我对此有很多麻烦。
使用此输入的“#5p56.02#”我必须具有“ Invalid!在输入中扫描了p个字符”或“ ### 33 ## 5”,它必须给我输出“ Invalid!有间隔序列在非空白字符之间。”(#表示间隔tho)
#include <stdio.h>
int main()
{
char str[20];
int i, frequency = 0;
printf("Enter a string: ");
gets(str);
for(i=0;str[i]!='\n'; ++i)
{
if(' '== str[i])
++frequency;
}
printf("Frequency of %d", frequency);
return 0;
}
我对此一无所知,我不知道该怎么办。
答案 0 :(得分:0)
%s将扫描到下一个空格,如果没有特定的掩码,您将无法扫描多个单词。
您可以使用掩码“ [^ \ n]”,该掩码将扫描所有内容,直到出现\ n
#include <stdio.h>
#include <string.h>
int main(void){
char string[50];
int i, frequency = 0;
printf("Enter a string: ");
scanf("%[^\n]", string);
for(i=0;i<strlen(string);i++)
{
printf("%c,", string[i]);
if(string[i] == ' ') {
frequency++;
}
}
printf("Frequency of %d", frequency);
return 0;
}
问题是,使用此掩码,您将必须弄清楚如何停止循环,我尝试使用在线编译器,但使用string [i]!='\ n'
时遇到了一些问题编辑:使用strlen更新,对我来说很好
printf("%c,", string[i]);
是出于调试原因。
检查一下以了解更多有关口罩的信息 http://personal.ee.surrey.ac.uk/Personal/R.Bowden/C/scanf.html
答案 1 :(得分:0)
要检测“无效!非空白字符之间有一个间隔序列。” 条件,我从字符串的开头和结尾处删除了间隔字符。如果仍存在间隙,则介于其他字符之间:
char *sp = str;
while (*sp == '#') ++sp; // skip over the leading gaps
char *ep = sp+strlen(sp); // string end position
while (ep > sp && *--ep == '#') *ep = '\0'; // erase trailing gaps
if (strchr(sp, '#'))
puts("Invalid! There is a gap sequence between non-blanket characters."),
exit(1);
要检测“输入中有无效!扫描的p个字符” 条件,我将尝试转换为double
并检查是否存在无法识别的字符:
double real = strtod(sp, &ep); // try to convert double
if (*ep || ep == sp) // conversion failed at ep
printf("Invalid! scanned p character among input\n", *ep), exit(1);
printf("%f\n", real);