1.以下程序的功能是从键盘输入一行字符,写到文件a.txt中。请改正程序中的错误。 #include<stdio.h> #include<stdlib.h> int main(void) { char ch; FILE fp; if((fp=fopen("a.txt","w"))!=NULL) { printf("Can't open file!"); exit(1); } while((ch=getchar())!='\n') fputc(ch,fp); fclose(fp); return 0; }
时间: 2024-01-23 21:03:09 浏览: 78
以下是程序中的错误及修改方法:
1. `FILE fp;` 应改为 `FILE *fp;`,因为 `fopen` 函数返回的是指向文件的指针类型,需要用指针变量来接收。
2. `if((fp=fopen("a.txt","w"))!=NULL)` 中的判断条件应该是 `if(fp==NULL)`,即判断文件指针是否为 NULL,如果为 NULL 则说明文件打开失败。
3. `printf("Can't open file!");` 应改为 `printf("Can't open file!\n");`,因为输出的字符串后面需要加上换行符,否则下一行的输出会在同一行。
4. 应在程序开头添加 `#include <stdio.h>`,因为程序中使用了文件操作相关的函数。
修改后的程序如下:
```C++
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char ch;
FILE *fp;
if ((fp = fopen("a.txt", "w")) == NULL) {
printf("Can't open file!\n");
exit(1);
}
while ((ch = getchar()) != '\n') {
fputc(ch, fp);
}
fclose(fp);
return 0;
}
```
建议:在文件操作中,一定要注意文件是否打开成功,否则会导致程序出错。
相关问题
程序改错。下面程序的功能是从键盘输入一行字符,统计其中有多少单词。假设单词之间以空格分开。[提示:判断是否有新单词出现的方法是——当前被检验的字符不是空格,而前一被检验字符是空格,则表示有新单词出现。] #include<stdio.h> #define ARR_SIZE 80; main() { char str[ARR_SIZE]; int i, num; gets(str); if(str[0] != ' ' && str[0] != '\0') { num = 1; } else { num = 0; } for(i = 1 ; str[i] != '\0'; i++) { if(str[i] != ' ' && str[i-1] = ' ') { num++; } } printf("num=%d\n", num); }
好的,这里是改正后的代码:
```c
#include <stdio.h>
#define ARR_SIZE 80
int main() {
char str[ARR_SIZE];
int i, num;
gets(str);
if (str[0] != ' ' && str[0] != '\0') {
num = 1;
} else {
num = 0;
}
for (i = 1; str[i] != '\0'; i++) {
if (str[i] != ' ' && str[i - 1] == ' ') { // 修正判断条件
num++;
}
}
printf("num=%d\n", num);
return 0;
}
```
主要的改正点是在 `for` 循环中判断新单词的条件上。原代码中使用了 `=` 赋值符号,导致编译出错。应该使用 `==` 进行相等判断,判断当前字符不是空格,而前一个字符是空格,才能算作一个新单词的出现。
(程序改错)从键盘上输入一个字符,当该字符是英文字母时,显示字符串“leter”;当该字符是数字时,显示字符串“digit”;当该字符是空格时,显示字符串“space”;否则显示字符串“other”。例如:当输入F时,输出:letter。请改正注释符号“//”所在行的错误,使其能够计算出正确的结果,并将改正后的结果(整行内容)填写“//”后。 #include<stdio.h> int main(){ char flag,c; printf("\n Please enter a character"); c=getchar(); if(c>='a' && c<='z' || c>='A' && c<='Z') flag='a'; else if(c>='0' && c<='9') flag='b'; else if(c=' ')// 输入答案 flag='c'; else flag='d'; switch(flag){ case 'a':printf("\n letter \n"); break; case b:printf("\n digit \n"); break;// 输入答案 case 'c':printf("\n space \n");// 输入答案 case 'd':printf("\n other \n"); } return 0; }
#include<stdio.h>
int main(){
char flag,c;
printf("\n Please enter a character");
c=getchar();
if(c>='a' && c<='z' || c>='A' && c<='Z')
flag='a';
else if(c>='0' && c<='9')
flag='b';
else if(c==' ')// 修正错误:“=”改为“==”
flag='c';
else
flag='d';
switch(flag){
case 'a':printf("\n letter \n"); break;
case 'b':printf("\n digit \n"); break;// 修正错误:添加单引号
case 'c':printf("\n space \n"); break;// 修正错误:添加break
case 'd':printf("\n other \n");
}
return 0;
}
阅读全文