c - 从键盘读取单词并将它们放入矩阵中
问题描述
我必须从键盘上读取 5 个单词并将它们放入矩阵中。例如,如果我有单词 RED,则字母将在第一行的列之间拆分。红等。
这是我的代码,但它在我扫描 5 个字母后退出
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
char mat[3][3];
for(int i=0; i<2; i++)
for(int j=0;j<2;j++)
{
scanf("%s", &mat[i][j]);
}
for(int i=0; i<2; i++)
for(int j=0;j<2;j++)
{
printf("%s\t",mat[i][j]);
}
return 0;
}
解决方案
由于您没有为字符串指定任何大小...我认为它们的长度是任意的...
// Takes input using the 'stdin' stream...
char* read_input(void)
{
char ch;
size_t len = 0;
size_t size = len + 2;
char* str = realloc(NULL, size);
if (!str)
return str;
while ((ch = fgetc(stdin)) != -1 && ch != '\n')
{
str[len++] = ch;
if (len == size)
{
str = realloc(str, size += 2);
if (!str)
return str;
}
}
str[len++] = '\0';
return realloc(str, len);
}
这个函数将读取输入,现在我们还需要一个函数来检查字符串是否是一个有效的单词......即它只包含字母......
// Checks whether the specified string is alphabetic or not...
int is_alpha_string(char* str, char* err_msg)
{
for (unsigned i = 0u; i < strlen(str); i++)
if (!isalpha(str[i]))
{
fprintf(stderr, err_msg);
return 0;
}
return 1;
}
在此之后,只需执行以下操作:
// The 'main()' function...
int main(void)
{
char* matrix[5];
for (unsigned i = 0u; i < 5u; i++)
{
printf("Enter your word here: ");
matrix[i] = read_input();
i -= !is_alpha_string(matrix[i], "Error! Entered text is not a valid word!\n\n");
}
for (int i = 0; i < 5; i++)
printf("%s\n", matrix[i]);
return 0;
}
编辑: 不要忘记在顶部添加这些包括:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
推荐阅读
- c - 将 ASCII 连接到字符串以进行比较
- jmeter - Jmeter - 我的响应有多个相同 id 的值。我想提取这些值并将其增量传递给下一个请求
- javascript - 使用 jQuery $.getScript() 方法以给定的顺序加载多个 JS 文件
- arrays - Delphi ANSI到EBCDIC转换数组问题
- oracle - 顶点 oracle 中的 DBMS_SCHEDULER
- macos - 使安装失败 macOS Catalina
- html - 在 Chrome 中调整 `textarea` 的大小会添加一个内联 CSS 属性 `margin`,但 Firefox 没有添加它...为什么?
- r - 如何一次将R中的日期从多种格式转换?
- c# - .NET Swagger UI 主要 API 规范
- ruby - Ruby:如何在知道其(数组)路径的哈希中检索值?