我不知道如何使用 scanf 并获取它的输入作为函数 readBigNum 的输入我想创建数组直到用户输入 Enter 并且我想编写一个函数将其分配给数组并返回大数的大小 我希望 readBigNum 确切地具有 char *n 但我无法在我的函数中关联它
#include <stdio.h>
int readBigNum(char *n)
{
char msg[100],ch;
int i=0;
while((ch=getchar())!='\n')
{
if(ch!='0'||ch!='1'||ch!='2'||ch!='3'||ch!='4'||ch!='5'||ch!='6'||ch!='7'||ch!='8'||ch!='9')
return -1;
msg[i++]=ch;
}
msg[i]='\0';
i=0;
return i;
}
int main()
{
const char x;
const char n;
n=scanf("%d",x);
int h=readBigNum(&n);
printf(h);
}
最佳答案
如果我正确理解你的问题,你想要实现一个函数,从标准输入读取数字并将它们存储在缓冲区中。如果遇到非数字,则要返回-1。如果遇到换行符,您需要返回已读取的字符数。如果这是正确的,您可能希望您的代码如下所示:
#include <stdio.h>
int readBigNum(char* n)
{
char ch;
int i=0;
while ((ch = getchar()) != '\n') {
if (ch < '0' || ch > '9') {
return -1;
}
n[i++] = ch;
}
n[i] = '\0';
return i;
}
int main(void) {
char buf[100];
int bytes = readBigNum(buf);
printf("%s\n", buf);
printf("%d\n", bytes);
};
与您的实现的主要区别
- 要填充的数组在 main 中初始化并传递给 readBigNum 函数。这比让函数控制内存要简单一些,在这种情况下,您可能需要处理
malloc
和free
。即使如此,您仍面临缓冲区溢出的风险,并且可能需要采取额外的预防措施来防止这种情况发生。 - 该函数在返回之前不会将
i
设置为 0。原始代码永远不会返回-1
(出错时)或0
以外的值,这似乎不是意图。 - 此代码不使用
scanf
。鉴于您对想要完成的任务的描述,使用scanf
似乎不太合适,但是,如果您提供有关调用原因的更多信息,可能有助于告知此答案。< printf
调用不正确,已更新为打印返回的字节数,并添加了一个额外的printf
调用来打印更新后的缓冲区。<
关于c - 读取字符串并将其分配给数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8515782/