C程序不打印作为输入给出的字符串

我希望输出打印我们打印的数据。但它没有按预期工作,输出没有显示并且正在退出

#include <stdio.h>
    
int main() {
    char name[20], department[3], section[1];
    
    printf("enter the name of the student:");
    scanf("%s", name);
    
    printf("enter your department:");
    scanf("%s", department);
    
    printf("enter the section");
    scanf("%s", section);
    
    printf("Name:%s n  Department:%s n  Section: %s  ", name, department, section);
    
    return 0;
}

回答

您的程序具有未定义的行为,因为数组太短并且scanf()将用户输入存储在数组末尾之外,尤其是最后一个,section它只能包含一个scanf()无论如何都无法读取的空字符串。

使数组更大,并告诉scanf()空终止符之前要存储的最大字符数,即:数组的大小减 1。

这是一个修改后的版本:

#include <stdio.h>
    
int main() {
    char name[50], department[50], section[50];
    
    printf("enter the name of the student:");
    if (scanf("%49s", name) != 1)
        return 1;
    
    printf("enter your department:");
    if (scanf("%49s", department) != 1)
        return 1;
    
    printf("enter the section");
    if (scanf("%49s", section) != 1)
        return 1;
    
    printf("Name:%sn  Department:%sn  Section: %sn", name, department, section);
    
    return 0;
}

请注意,scanf%s转换一起使用要求每个数据项都是一个没有嵌入空格的单词。如果您希望 name、department 和 section 容纳空格,这对除 之外的任何人都更现实Superman Krypton A,您可以使用%[n]初始空格跳过挂起的空格和换行符(或fgets()在另一章中):

#include <stdio.h>
    
int main() {
    char name[50], department[50], section[50];
    
    printf("enter the name of the student:");
    if (scanf(" %49[^n]", name) != 1)
        return 1;
    
    printf("enter your department:");
    if (scanf(" %49[^n]", department) != 1)
        return 1;
    
    printf("enter the section");
    if (scanf(" %49[^n]", section) != 1)
        return 1;
    
    printf("Name:%sn  Department:%sn  Section: %sn", name, department, section);
    
    return 0;
}

scanf(" %49[^n]", name)意味着跳过任何初始空格,包括来自先前输入的未决换行符,读取和存储以及与换行符不同的读取字节,最多 49 个字节,附加一个空字节并返回 1 表示成功,0 表示转换失败或EOF文件结束在不存储任何字节的情况下到达。对于此特定调用,如果当前选择的语言环境存在编码错误,则可能会发生转换失败。


以上是C程序不打印作为输入给出的字符串的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>