C语言练习:输出最长的名字

C语言练习:输出最长的名字

一个班级中有 n个学生,每个学生有一个名字。班主任希望知道学生中名字最长(名字中的一个空格长度计为 1)的学生是谁。

提示 1:带有空格的输入,可以使用 scanf 读入时可以逐字符读入,第一个参数使用 “%c”,每行读入以 \n 字符被读入来判断结束。对于是否还有新的行没有读入的情况,可以用:

while (scanf(/* 这部分省略*/) != EOF) {}

的方式进行。

提示 2:由于 scanf 之后使用 “%c” 格式,读入 n 之后的 \n 一定要在之前进行处理。初始化代码中已经给出。

输入格式

你的程序接受的输入的第一行是一个整数 n,表示学生的总数。之后的 n行,每行会接受一个学生的名字(可能有空格)。学生的名字不超过 100 个字符。

输出格式

输出 n位学生中最长的学生名字(如果有多个名字一样长的学生,输出第一个)。

一开始我写代码是这样的:

//无法输出期望答案!!!!!!!!!!!
#include <stdio.h>
#include <string.h>
int main() {
    int n;
    int i = 0;
    int k = 0;
    int max = 0;
    char a;
    char max_name[101] = "";
    
    scanf("%d\n", &n);
    char name[n][101];
    
    while (scanf("%c", &name[k][i++]) != EOF) {
        if (name[k][i - 1] == '\n') {
            if (strlen(name[k]) > strlen(max_name)) {
                strncpy(max_name,name[k], i - 1);
            }
            if (k < n ) {
                k++;
                i = 0;                 
            }else {
                break;
            }
        }
    }
    printf("%s\n", max_name);
    return 0;
}

输出:
用例配上我的代码输出结果
也不知道错在哪里。

=分割线=
参考代码后把每一行的循环放到了外面,取消了char的二维数组就可以了。
参考代码

#include <stdio.h>
#include<string.h>
int main() {
    int n;
    char m;
    int i,  j;
    scanf("%d\n", &n);
        char max[100] = " ";
    for ( i = 0; i < n; i++) {
        char name[100] = " ";
        while (scanf("%c", &m) != EOF) {
            if (m!='\n'){
                name[j++] = m ;
            }
            else{
                j = 0;
                if (strlen(name) > strlen(max))
                   strcpy(max,name);
                break;
            } 
        }
    }
    printf("%s\n",max);
    return 0;
}

输出:
在这里插入图片描述
希望有大佬能帮忙看一下第一段的代码中问题具体所在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值