【发布时间】:2017-11-12 19:55:39
【问题描述】:
在这里,我想使用二维数组将一些学生姓名转换为大写。这编译没有错误,但在执行时它给出了一个称为“分段错误”的错误。我使用一维数组尝试了这个,但它只打印我输入的姓氏。最后,我想分别计算输入名称的总整数值。我对C语言相当陌生,所以可能会有很多错误。有什么想法可以修复我的代码吗?
#include<stdio.h>
#define SIZE 6
void input(char arr[][10], int size);
void upper(char arr[][10], int size);
void findIntValue(char arr[][10], int size);
int main(void)
{
char arr[SIZE][10] = {0.0};
input(arr, SIZE);
upper(arr, SIZE);
findIntValue(arr, SIZE);
return 0;
}
void input(char arr[][10], int size)
{
int i, j;
for(i = 0 ; i < size ; i++)
{
printf("\nEnter the name: ");
scanf(" %s", arr[i]);
}
}
void upper(char arr[][10], int size)
{
int i, j;
for(i = 0 ; i < size && arr[i] != '\0' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '\0' ; j++)
{
if(arr[i][j] >= 97 && arr[i][j] <= 122)
{
arr[i][j] -= 32;
}
}
}
for(i = 0; i < size && arr[i] != '\0' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '\0' ; j++)
{
printf("\n%s\n", arr);
}
}
}
void findIntValue(char arr[][10], int size)
{
int i, j;
int total = 0;
for(i = 0 ; i < size && arr[i] != '\0' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '\0' ; j++)
{
total += arr[i][j];
printf("\n%s\t%d\n", arr, total);
total = 0;
}
}
}
【问题讨论】:
-
char arr[SIZE][10] = {0.0};你用double值初始化了achar 数组。 -
scanf(" %s", arr);你应该在某处使用i... -
for(i = 0 ; i < size && arr[i][j] != '\0' ; i++)你使用了未初始化的变量j -
这不会影响您的程序输入或输出。但是,当您定义一个名称为 SIZE 的宏时,不要传递名称为 size 的参数,您可以在整个程序中直接使用 SIZE。
-
@Gerhardh 如果我在第一个 for 循环中省略 'j',它会影响数组 arr[i][j] 吗?
标签: c arrays multidimensional-array uppercase lowercase