C中未显示输出

yfjy0ee7  于 2023-10-16  发布在  其他
关注(0)|答案(2)|浏览(101)

我正在写一个代码,它必须识别一个单词中的字母'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;
}

如果我输入任何单词并按回车键,则不会打印任何内容。另一件事是,当我从底部的两行中删除注解斜杠时,程序会经历一个无限循环。
是什么让程序进入无限循环?

4dc9hkyq

4dc9hkyq1#

这听起来像是学校的作业,所以我将专注于建议/批评你的代码,而不是给出一个解决方案。
我的第一个建议是使用for循环而不是while循环。C语言中的一条经验法则是,当你实际上不知道你的程序需要看多少东西时,只使用while循环。
你已经知道了字符串的长度,所以将for循环设置为对每个字符只循环一次。
接下来,您需要更改使用printf的方式。%d说明符用于打印整数,但您正在传递它'1'。这不是一个整数,它是符号1(实际上是值49,更多信息请参见the ascii table)的抽象表示。
您可以将值1传递给printf,也可以使用%c说明符,该说明符需要字符串。
更好的是,只要说printf("1");
这并不能让你一路走到那里,但我认为它奠定了基础工作,所以你可以找到解决方案!

nnsrf1az

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),因为不需要更多的搜索
第五,你应该在感到无聊和询问之前重新阅读,重新思考,重新编写作业
第六,通过修改你的代码有一个工作版本,但是你应该在看解决方案之前尝试编写一个好的解决方案,因为它更好地解决你自己的问题

#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);
    int result=0;

    while( i<length) {
        t = word[i] == 't';
        T = word[i] == 'T';
        if((t || T) && i <= length / 2) {
            result=1;
            break;
        } else if((t || T) && i > length / 2) {
            result=2;
            break;
        }else{
            result=-1;
        }
        i++;
    }
    printf("%d",result);
    return 0;
}

相关问题