c-C语言数组大小写转化后多输出一行乱码

问题描述

C语言数组大小写转化后多输出一行乱码
#include "stdio.h"
#include "stdafx.h"
#include "iostream"

using namespace std;

int main()
{
    char c[256], d[256];
    int i = 0;
    while
        ((c[i++] = getchar()) != 'n');
    c[i] = '';
    i = 0;
    printf("%s", c);
    printf("n");
    while (c[i])
    {
        if ('a' <= c[i] && c[i] <= 'z')
        {
            c[i] -= 32;
        }
        else if ('A' <= c[i] && c[i] <= 'Z')
        {
            c[i] += 32;
        }
        d[i] = c[i];
        i++;
    }
    printf("%s", d);
    printf("n");
    return 0;
}

如图代码所示,每次转化后都会多输出一行乱码,问题已经解决,
我把while(c[i])换成while(i<sizeof(c))就输出正常了,我想知道为什么
while(c[i])有什么错误,多谢大神~!

解决方案

建议你先初始化数组 c 和 d 的所有元素为零,因为局部变量的初始值是随机的。
假如你只给 c 和 d 的前 100 个元素赋值了,才能后面的 156 个元素的值就是随机数。当你用 c[i] 判断时,因为没有 0 数值的存在,导致越界了。

解决方案二:

如果输入的字符串超过了你数组c的大小,就会导致c的结尾字符不是数组的最后一个元素,就会输出后面的内容空间的内容

解决方案三:

只是,定义了数组,但未对数组初始化。此时,数组是空的。
sizeof(c[i])返回该元素定义时的字节数,是整型。所以就OK。

解决方案四:

如果你用do while循环就没有这个问题了,这样就把也拷贝到d中了,不过建议凡是用到结构类变量先进行清0操作

解决方案五:

如果你用do while循环就没有这个问题了,这样就把也拷贝到d中了,不过建议凡是用到结构类变量先进行清0操作

解决方案六:

初始化数组,然后应该就没有这个问题了

解决方案七:

初始化数组,然后应该就没有这个问题了

解决方案八:

数组大半部分都没有赋值,全都初始化为0了。。。

时间: 2024-09-11 18:16:21

c-C语言数组大小写转化后多输出一行乱码的相关文章

代码-JAVA首字母大小写转化

问题描述 JAVA首字母大小写转化 题目要求 比如 This is a program. 要转换成 This Is A Program. 而我的只能是 This is a program String first=str.substring(0,1).toUpperCase(); String rest=str.substring(1,str.length()).toLowerCase(); String newstr=new StringBuffer(first).append(rest).t

C语言数组入门之数组的声明与二维数组的模拟_C 语言

语言中指针与数组这两个概念之间的联系是密不可分的,以至于如果不能理解一个概念,就无法彻底理解另一个概念. C语言中的数组值得注意的地方有以下两点: C语言中只有一维数组,而且数组的大小必须在编译期就作为一个常数确定下来.然而,C语言中数组的元素可以是任何类型的对象,当然也可以是另外一个数组.这样,要"仿真"出一个多维数组就不是一件难事. 对于一个数组,我们只能够做两件事:确定该数组的大小,以及获得指向该数组下标为0的元素的指针.其他有关数组的操作,哪怕它们看上去是以数组下标进行运算的,

图片-有关C语言数组的一个小问题

问题描述 有关C语言数组的一个小问题 这是题目 这是我做的 但是不知道为什么我这个写出来只能完成一半 那个"不存在"的提醒不管什么情况都会显示出来 想请教一下啊 谢谢了 解决方案 首先i应该从0开始赋值,否则就会把a[0]也就是T漏掉.其次,判断不存在应该是所有位置都找过以后以后才能判断确实不存在,而不是每个位置都在判断. 具体做法是把不存在的输出放在循环体外面进行判断,然后增加一个变量t并赋初值为0,在找到的时候让t的值变为1,这样一来可以明白:在循环完成之后如果t的值为1就说明找到

c语言课程设计-c语言数组问题,,,,,,,,,,

问题描述 c语言数组问题,,,,,,,,,, #includevoid main(){ int ijmna[20]; printf(""input ge shu n:""); scanf(""%d""&n); printf("" ""); printf(""input yi dong wei shu m:""); scanf("&

c语言-C语言数组越界的含义

问题描述 C语言数组越界的含义 听同学说C语言数组越界会导致出错,我试验了下不会,谁能写一个数组越界出错的例子? 解决方案 这个不一定能观察到,因为C没有越界检查,你可以这么写: int a[10]; int i=0; while (true) { a[i++] = i; } 肯定会报错 解决方案二: 越界不就是超过数组的大小,随便写个拷贝就行了 解决方案三: 例如你声明数组a[10],如果访问a[10]就发生越界错误,越界错误的本质是访问了未知内存空间,如果之前此区域内存被使用后,此时访问获得

这是汇编的大小写转化问题

问题描述 这是汇编的大小写转化问题 当输入要改变的字符串后,第一次输出的为正常,而第二次就不正常了 data segment ;定义字符串缓冲区 ;MAXLEN 表示允许输入的最大字符数量 ;ACTLEN 表示实际输入的数量 ;STR 用于存储输入的字符串 ;以下面为例,允许最大输入5个字符,如果STR后面的长度也定义为6,则实际输入的字符数量仅为5, ;因为最后一个字符会用于存储0Dh(回车符号) ;例如:输入""1234"",然后回车,此时内存的情况为: 05

c语言-有关C语言数组的一个小问题

问题描述 有关C语言数组的一个小问题 char paidian; paidian = "34567890JQKA2"[(num - 1) / (4 * JIFUPAI)]; 解决方案 C语言中一个小问题c语言中的一个小问题关于<c语言的一个小问题>的补充 解决方案二: 你这个paidian什么意思?"34567890JQKA2"是字符串[(num - 1) / (4 * JIFUPAI)]似乎是个数字?这个没看懂也不知道你的问题是啥 解决方案三: 难道是

c语言-C语言数组定义问题,求解答

问题描述 C语言数组定义问题,求解答 int b; scanf_s("%d", &b); int Array[]; int i; for (i = 0; i<b; i++) { scanf("%d", &Array[i]); } 这个为什么报错呀 解决方案 首先你的数组里面是不确定的,不能定义长度不确定的数组,除非你是用动态内存区定义.应该改为Array[100]或者其他的,其次sacnf后面不应该有_s 解决方案二: 你只是定义了数组, 但是

GO语言数组和切片实例详解_Golang

本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式:[length]Type .[N]Type{value1, value2, ... , valueN}.[...]Type{value1, value2, ... , valueN} 如下: 复制代码 代码如下: func test5() {     var iarray1 [5]int32