C 使用输入/输出标志每行显示一个单词的字符串
我编写了一个程序,首先存储用户发送的任意数量的文本行。之后,它会检查一个新词何时出现,如果出现了,它会在新行中打印出来。 下面是我的代码:C 使用输入/输出标志每行显示一个单词的字符串,c,arrays,string,C,Arrays,String,我编写了一个程序,首先存储用户发送的任意数量的文本行。之后,它会检查一个新词何时出现,如果出现了,它会在新行中打印出来。 下面是我的代码: #include<stdio.h> #define IN 1 //inside a word #define OUT 0 //outside a word int main() { char s[100]; //storing the string entered by user int c; //get
#include<stdio.h>
#define IN 1 //inside a word
#define OUT 0 //outside a word
int main()
{
char s[100]; //storing the string entered by user
int c; //getchar reading variable
int i=0; //iterating variable
while((c=getchar())!=EOF)
{
s[i++]=c;
}
s[i]='\0'; //end of string
i=0;
int p=0; //stores the start of the word
int current=OUT; //flag to indicate if program is inside or outside a word
while(s[i]!='\0')
{
if(current==OUT) //when program is outside a word
{
if(s[i]!=' ' || s[i]!='\n' || s[i]!='\t') //word found
{
p=i; //store starting position of word
current=IN;
}
}
else if(current==IN) //program is inside a word
{
if(s[i]==' ' || s[i]=='\n' || s[i]=='\t') //end of word found
{
current=OUT; //flag now outside the word
for(int j=p;j<i;j++) //print from starting position of word
{
printf("%c",s[j]);
}
printf("\n"); //go next line
}
}
++i; //incremnent the iterator variable
}
return 0;
}
#包括
#在1//中定义一个单词
#在单词外定义0//
int main()
{
char s[100];//存储用户输入的字符串
int c;//getchar读取变量
int i=0;//迭代变量
而((c=getchar())!=EOF)
{
s[i++]=c;
}
s[i]='\0';//字符串结尾
i=0;
int p=0;//存储单词的开头
int current=OUT;//指示程序是在字内还是在字外的标志
而(s[i]!='\0')
{
if(current==OUT)//当程序在字外时
{
如果(s[i]!=''|s[i]!='\n'|s[i]!='\t')//找到单词
{
p=i;//存储单词的起始位置
电流=英寸;
}
}
else如果(current==IN)//程序在一个字内
{
if(s[i]=''||s[i]='\n'||s[i]='\t')//找到单词的结尾
{
current=OUT;//现在在单词外部标记
对于(int j=p;j向我跳出来的第一个bug:
if(s[i]!=' ' || s[i]!='\n' || s[i]!='\t')
将始终返回true。您需要&&
,或者在使用其他位置的整个条件周围使用!()
,以实现对称
或者更好的方法是,将其分解成一个函数,或者使用
中的isspace
第一个向我跳出的bug:
if(s[i]!=' ' || s[i]!='\n' || s[i]!='\t')
将始终返回true。您需要&&
,或者在使用其他位置的整个条件周围使用!()
,以实现对称
或者更好的方法是,将其分解成一个函数,或者使用
中的isspace
来确定字符是否为空格是不正确的过滤条件。|
运算符意味着或。使用chained Or将允许表达式每次计算为true。您需要AND运算符&
。当一个操作数的计算结果为false时,and运算符就会失败,或者在C中,0
除此之外,还有更好的检查空白的方法。一种方法是使用中的isspace
函数,该函数将字符接受为int
,也可以是无符号字符
,并确定该字符是否为、'\t'、'\v'、'\n'或'\r'
中的任何字符。您还可以通过开关语句
switch(ch) {
case ' ':
// do something
break;
case '\n':
//do something
break;
}
确定字符是否为空白的筛选条件不正确。|
运算符表示或。使用chained OR将允许表达式每次求值为true。您需要AND运算符&&
。只要一个操作数求值为false,或在C情况下,0
,AND运算符就会失败。
除此之外,还有更好的检查空白的方法。一种方法是使用中的isspace
函数,该函数将字符接受为int
,也可以是无符号字符
,并确定该字符是否为、'\t'、'\v'、'\n'或'\r'
中的任何字符。您还可以通过开关语句
switch(ch) {
case ' ':
// do something
break;
case '\n':
//do something
break;
}
太棒了!!我没有使用&operator,因为没有考虑额外的新行,程序进入了IN-word模式。纠正上述错误使程序按预期工作。谢谢。太棒了!!我没有使用&operator,因为没有考虑额外的新行,程序变为into在word模式下。纠正上述错误使程序按预期工作。谢谢。您对“任意”的限制较低:您对输入或输出的转换有问题吗?请提取a,这将极大地提高您问题的质量!您对“任意”的限制较低:DIs您的输入或输出转换有问题吗?请提取a,这将极大地提高您的问题质量!”使用isspace…它接受字符“-->详细信息:是…(int ch)
函数接受int
,其值在无符号字符
,EOF
范围内。“使用isspace…它接受一个字符”-->Detail:是…(int ch)
函数接受一个int
,其值在无符号字符
,EOF
范围内。