我正在写一个代码,它必须识别一个单词中的字母't'
或'T'
,在中间之前或之后。如果字的前半部分包含't'
或'T'
,则程序应输出1
。如果前半部分不包含字母't'
或'T'
,但后半部分包含,则程序应输出2
。否则,如果字中根本没有't'
或'T'
,则程序的输出应为-1
。输入的单词不超过50个字母。
#include <stdio.h>
#include <string.h>
int main() {
char word[50];
int i = 0, length, t = 0, T = 0;
scanf("%s", word);
length = strlen(word);
t = word[i] == 't';
T = word[i] == 'T';
while(!t || !T) {
if((t || T) && i <= length / 2) {
printf("%d", '1');
} else if((t || T) && i > length / 2) {
printf("%d", '2');
}
i++;
}
return 0;
}
如果我输入任何单词并按回车键,则不会打印任何内容。另一件事是,当我从底部的两行中删除注解斜杠时,程序会经历一个无限循环。
是什么让程序进入无限循环?
2条答案
按热度按时间4dc9hkyq1#
这听起来像是学校的作业,所以我将专注于建议/批评你的代码,而不是给出一个解决方案。
我的第一个建议是使用
for
循环而不是while
循环。C语言中的一条经验法则是,当你实际上不知道你的程序需要看多少东西时,只使用while
循环。你已经知道了字符串的长度,所以将for循环设置为对每个字符只循环一次。
接下来,您需要更改使用
printf
的方式。%d
说明符用于打印整数,但您正在传递它'1'
。这不是一个整数,它是符号1(实际上是值49,更多信息请参见the ascii table)的抽象表示。您可以将值
1
传递给printf
,也可以使用%c
说明符,该说明符需要字符串。更好的是,只要说
printf("1");
这并不能让你一路走到那里,但我认为它奠定了基础工作,所以你可以找到解决方案!
nnsrf1az2#
条件
!t || !T
作为循环条件没有任何意义..只需检查i
是否小于length
第二,循环外的赋值
t = word[i] == 't'; T = word[i] == 'T';
没有意义.第三,printf行需要使用
%d
第四,你似乎没有得到程序的目的打印内部循环将导致打印许多数字,你只是想知道是否有t或T,你需要打印单个line.you可能会使用变量
int result=0;
来保存你想要的值,并在最后打印它...当然,你将需要使用break
语句在if((t || T) && i <= length / 2)
和if((t || T) && i > length / 2)
,因为不需要更多的搜索第五,你应该在感到无聊和询问之前重新阅读,重新思考,重新编写作业
第六,通过修改你的代码有一个工作版本,但是你应该在看解决方案之前尝试编写一个好的解决方案,因为它更好地解决你自己的问题