在 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;
  }
}