在 C 中使用二维数组将小写字母转换为大写字母
Converting lowercase to uppercase using 2D arrays in C
这里我想使用二维数组将一些学生姓名转换为大写。这编译没有错误,但在执行时它给出了一个名为 'segmentation fault' 的错误。我尝试使用一维数组进行此操作,但它只打印我输入的姓氏。最后我想分别计算输入名称的总整数值。我是 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] != '[=10=]' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '[=10=]' ; j++)
{
if(arr[i][j] >= 97 && arr[i][j] <= 122)
{
arr[i][j] -= 32;
}
}
}
for(i = 0; i < size && arr[i] != '[=10=]' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '[=10=]' ; 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] != '[=10=]' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '[=10=]' ; j++)
{
total += arr[i][j];
printf("\n%s\t%d\n", arr, total);
total = 0;
}
}
}
enter image description here
您以错误的方式使用二维。您需要在 scanf()
中提供 arr[i]
。因为您的数组是一个二维数组,其中 arr[i]
能够存储一个字符串。所以你的输入 fn 将包含这个语句。 scanf("%s",arr[i])
输出函数相同。
希望这有帮助:)
你的代码有很多问题。
问题1:在函数输入中,需要将arr[i]作为输入传递给scanf
问题 2:在上层函数中,在第一个循环中,您试图读取 j 的未初始化值,这可能会导致未定义的行为。
问题 3:在上面的函数中,在第二个循环中,在 printf 中你再次使用 arr,而你应该使用 arr[i],而且你不需要两个循环来打印。一个循环就够了。
问题4:findIntValue的循环和打印逻辑错误。您需要在内循环完成后打印 total 和 arr。另外,打印值应该是 arr[i] 而不是 arr.
请在下面找到更正后的程序:
#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] != '[=10=]' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '[=10=]' ; j++)
{
if(arr[i][j] >= 97 && arr[i][j] <= 122)
{
arr[i][j] -= 32;
}
}
}
for(i = 0; i < size && arr[i][0] != '[=10=]' ; i++)
{
printf("\n%s\n", arr[i]);
}
}
void findIntValue(char arr[][10], int size)
{
int i, j;
int total = 0;
for(i = 0 ; i < size && arr[i][0] != '[=10=]' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '[=10=]' ; j++)
{
total += arr[i][j];
}
printf("\n%s\t%d\n", arr[i], total);
total = 0;
}
}
这里我想使用二维数组将一些学生姓名转换为大写。这编译没有错误,但在执行时它给出了一个名为 'segmentation fault' 的错误。我尝试使用一维数组进行此操作,但它只打印我输入的姓氏。最后我想分别计算输入名称的总整数值。我是 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] != '[=10=]' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '[=10=]' ; j++)
{
if(arr[i][j] >= 97 && arr[i][j] <= 122)
{
arr[i][j] -= 32;
}
}
}
for(i = 0; i < size && arr[i] != '[=10=]' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '[=10=]' ; 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] != '[=10=]' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '[=10=]' ; j++)
{
total += arr[i][j];
printf("\n%s\t%d\n", arr, total);
total = 0;
}
}
}
enter image description here
您以错误的方式使用二维。您需要在 scanf()
中提供 arr[i]
。因为您的数组是一个二维数组,其中 arr[i]
能够存储一个字符串。所以你的输入 fn 将包含这个语句。 scanf("%s",arr[i])
输出函数相同。
希望这有帮助:)
你的代码有很多问题。
问题1:在函数输入中,需要将arr[i]作为输入传递给scanf
问题 2:在上层函数中,在第一个循环中,您试图读取 j 的未初始化值,这可能会导致未定义的行为。
问题 3:在上面的函数中,在第二个循环中,在 printf 中你再次使用 arr,而你应该使用 arr[i],而且你不需要两个循环来打印。一个循环就够了。
问题4:findIntValue的循环和打印逻辑错误。您需要在内循环完成后打印 total 和 arr。另外,打印值应该是 arr[i] 而不是 arr.
请在下面找到更正后的程序:
#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] != '[=10=]' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '[=10=]' ; j++)
{
if(arr[i][j] >= 97 && arr[i][j] <= 122)
{
arr[i][j] -= 32;
}
}
}
for(i = 0; i < size && arr[i][0] != '[=10=]' ; i++)
{
printf("\n%s\n", arr[i]);
}
}
void findIntValue(char arr[][10], int size)
{
int i, j;
int total = 0;
for(i = 0 ; i < size && arr[i][0] != '[=10=]' ; i++)
{
for(j = 0 ; j < 10 && arr[i][j] != '[=10=]' ; j++)
{
total += arr[i][j];
}
printf("\n%s\t%d\n", arr[i], total);
total = 0;
}
}